/** @file | |
Method declarations and structures for accessing the XenStore | |
Copyright (C) 2005 Rusty Russell, IBM Corporation | |
Copyright (C) 2005 XenSource Ltd. | |
Copyright (C) 2009,2010 Spectra Logic Corporation | |
Copyright (C) 2014, Citrix Ltd. | |
This file may be distributed separately from the Linux kernel, or | |
incorporated into other software packages, subject to the following license: | |
Permission is hereby granted, free of charge, to any person obtaining a copy | |
of this source file (the "Software"), to deal in the Software without | |
restriction, including without limitation the rights to use, copy, modify, | |
merge, publish, distribute, sublicense, and/or sell copies of the Software, | |
and to permit persons to whom the Software is furnished to do so, subject to | |
the following conditions: | |
The above copyright notice and this permission notice shall be included in | |
all copies or substantial portions of the Software. | |
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | |
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | |
IN THE SOFTWARE. | |
**/ | |
#ifndef _XEN_XENSTORE_XENSTOREVAR_H | |
#define _XEN_XENSTORE_XENSTOREVAR_H | |
#include "XenBusDxe.h" | |
#include <IndustryStandard/Xen/io/xs_wire.h> | |
typedef struct _XENSTORE_WATCH XENSTORE_WATCH; | |
/** | |
Fetch the contents of a directory in the XenStore. | |
@param Transaction The XenStore transaction covering this request. | |
@param DirectoryPath The dirname of the path to read. | |
@param Node The basename of the path to read. | |
@param DirectoryCountPtr The returned number of directory entries. | |
@param DirectoryListPtr An array of directory entry strings. | |
@return On success, XENSTORE_STATUS_SUCCESS. Otherwise an errno value | |
indicating the type of failure. | |
@note The results buffer is alloced and should be free'd by the | |
caller. | |
**/ | |
XENSTORE_STATUS | |
XenStoreListDirectory ( | |
IN CONST XENSTORE_TRANSACTION *Transaction, | |
IN CONST CHAR8 *DirectoryPath, | |
IN CONST CHAR8 *Node, | |
OUT UINT32 *DirectoryCountPtr, | |
OUT CONST CHAR8 ***DirectoryListPtr | |
); | |
/** | |
Determine if a path exists in the XenStore. | |
@param Transaction The XenStore transaction covering this request. | |
@param Directory The dirname of the path to read. | |
@param Node The basename of the path to read. | |
@retval TRUE The path exists. | |
@retval FALSE The path does not exist or an error occurred attempting | |
to make that determination. | |
**/ | |
BOOLEAN | |
XenStorePathExists ( | |
IN CONST XENSTORE_TRANSACTION *Transaction, | |
IN CONST CHAR8 *Directory, | |
IN CONST CHAR8 *Node | |
); | |
/** | |
Get the contents of a single "file". Returns the contents in *Result which | |
should be freed after use. The length of the value in bytes is returned in | |
*LenPtr. | |
@param Transaction The XenStore transaction covering this request. | |
@param DirectoryPath The dirname of the file to read. | |
@param Node The basename of the file to read. | |
@param LenPtr The amount of data read. | |
@param Result The returned contents from this file. | |
@return On success, XENSTORE_STATUS_SUCCESS. Otherwise an errno value | |
indicating the type of failure. | |
@note The results buffer is malloced and should be free'd by the | |
caller. | |
**/ | |
XENSTORE_STATUS | |
XenStoreRead ( | |
IN CONST XENSTORE_TRANSACTION *Transaction, | |
IN CONST CHAR8 *DirectoryPath, | |
IN CONST CHAR8 *Node, | |
OUT UINT32 *LenPtr OPTIONAL, | |
OUT VOID **Result | |
); | |
/** | |
Write to a single file. | |
@param Transaction The XenStore transaction covering this request. | |
@param DirectoryPath The dirname of the file to write. | |
@param Node The basename of the file to write. | |
@param Str The NUL terminated string of data to write. | |
@return On success, XENSTORE_STATUS_SUCCESS. Otherwise an errno value | |
indicating the type of failure. | |
**/ | |
XENSTORE_STATUS | |
XenStoreWrite ( | |
IN CONST XENSTORE_TRANSACTION *Transaction, | |
IN CONST CHAR8 *DirectoryPath, | |
IN CONST CHAR8 *Node, | |
IN CONST CHAR8 *Str | |
); | |
/** | |
Remove a file or directory (directories must be empty). | |
@param Transaction The XenStore transaction covering this request. | |
@param DirectoryPath The dirname of the directory to remove. | |
@param Node The basename of the directory to remove. | |
@return On success, XENSTORE_STATUS_SUCCESS. Otherwise an errno value | |
indicating the type of failure. | |
**/ | |
XENSTORE_STATUS | |
XenStoreRemove ( | |
IN CONST XENSTORE_TRANSACTION *Transaction, | |
IN CONST CHAR8 *DirectoryPath, | |
IN CONST CHAR8 *Node | |
); | |
/** | |
Start a transaction. | |
Changes by others will not be seen during the lifetime of this | |
transaction, and changes will not be visible to others until it | |
is committed (XenStoreTransactionEnd). | |
@param Transaction The returned transaction. | |
@return On success, XENSTORE_STATUS_SUCCESS. Otherwise an errno value | |
indicating the type of failure. | |
**/ | |
XENSTORE_STATUS | |
XenStoreTransactionStart ( | |
OUT XENSTORE_TRANSACTION *Transaction | |
); | |
/** | |
End a transaction. | |
@param Transaction The transaction to end/commit. | |
@param Abort If TRUE, the transaction is discarded | |
instead of committed. | |
@return On success, XENSTORE_STATUS_SUCCESS. Otherwise an errno value | |
indicating the type of failure. | |
**/ | |
XENSTORE_STATUS | |
XenStoreTransactionEnd ( | |
IN CONST XENSTORE_TRANSACTION *Transaction, | |
IN BOOLEAN Abort | |
); | |
/** | |
Printf formatted write to a XenStore file. | |
@param Transaction The XenStore transaction covering this request. | |
@param DirectoryPath The dirname of the path to read. | |
@param Node The basename of the path to read. | |
@param FormatString AsciiSPrint format string followed by a variable number | |
of arguments. | |
@return On success, XENSTORE_STATUS_SUCCESS. Otherwise an errno value | |
indicating the type of write failure. | |
**/ | |
XENSTORE_STATUS | |
EFIAPI | |
XenStoreSPrint ( | |
IN CONST XENSTORE_TRANSACTION *Transaction, | |
IN CONST CHAR8 *DirectoryPath, | |
IN CONST CHAR8 *Node, | |
IN CONST CHAR8 *FormatString, | |
... | |
); | |
/** | |
VA_LIST version of XenStoreSPrint(). | |
@param Transaction The XenStore transaction covering this request. | |
@param DirectoryPath The dirname of the path to read. | |
@param Node The basename of the path to read. | |
@param FormatString Printf format string. | |
@param Marker VA_LIST of printf arguments. | |
@return On success, XENSTORE_STATUS_SUCCESS. Otherwise an errno value | |
indicating the type of write failure. | |
**/ | |
XENSTORE_STATUS | |
XenStoreVSPrint ( | |
IN CONST XENSTORE_TRANSACTION *Transaction, | |
IN CONST CHAR8 *DirectoryPath, | |
IN CONST CHAR8 *Node, | |
IN CONST CHAR8 *FormatString, | |
IN VA_LIST Marker | |
); | |
/** | |
Register a XenStore watch. | |
XenStore watches allow a client to be notified via a callback (embedded | |
within the watch object) of changes to an object in the XenStore. | |
@param DirectoryPath The dirname of the path to watch. | |
@param Node The basename of the path to watch. | |
@param WatchPtr A returned XENSTORE_WATCH pointer. | |
@return On success, XENSTORE_STATUS_SUCCESS. Otherwise an errno value | |
indicating the type of write failure. EEXIST errors from the | |
XenStore are supressed, allowing multiple, physically different, | |
xenbus_watch objects, to watch the same path in the XenStore. | |
**/ | |
XENSTORE_STATUS | |
XenStoreRegisterWatch ( | |
IN CONST CHAR8 *DirectoryPath, | |
IN CONST CHAR8 *Node, | |
OUT XENSTORE_WATCH **WatchPtr | |
); | |
/** | |
Unregister a XenStore watch. | |
@param Watch An XENSTORE_WATCH object previously returned by a successful | |
call to XenStoreRegisterWatch (). | |
**/ | |
VOID | |
XenStoreUnregisterWatch ( | |
IN XENSTORE_WATCH *Watch | |
); | |
/** | |
Allocate and return the XenStore path string <DirectoryPath>/<Node>. If name | |
is the NUL string, the returned value contains the path string | |
<DirectoryPath>. | |
@param DirectoryPath The NUL terminated directory prefix for new path. | |
@param Node The NUL terminated basename for the new path. | |
@return A buffer containing the joined path. | |
*/ | |
CHAR8 * | |
XenStoreJoin ( | |
IN CONST CHAR8 *DirectoryPath, | |
IN CONST CHAR8 *Node | |
); | |
/** | |
Initialize the XenStore states and rings. | |
@param Dev A pointer to a XENBUS_DEVICE instance. | |
@return EFI_SUCCESS if everything went smoothly. | |
**/ | |
EFI_STATUS | |
XenStoreInit ( | |
XENBUS_DEVICE *Dev | |
); | |
/** | |
Deinitialize the XenStore states and rings. | |
@param Dev A pointer to a XENBUS_DEVICE instance. | |
**/ | |
VOID | |
XenStoreDeinit ( | |
IN XENBUS_DEVICE *Dev | |
); | |
// | |
// XENBUS protocol | |
// | |
XENSTORE_STATUS | |
EFIAPI | |
XenBusWaitForWatch ( | |
IN XENBUS_PROTOCOL *This, | |
IN VOID *Token | |
); | |
XENSTORE_STATUS | |
EFIAPI | |
XenBusXenStoreRead ( | |
IN XENBUS_PROTOCOL *This, | |
IN CONST XENSTORE_TRANSACTION *Transaction, | |
IN CONST CHAR8 *Node, | |
OUT VOID **Value | |
); | |
XENSTORE_STATUS | |
EFIAPI | |
XenBusXenStoreBackendRead ( | |
IN XENBUS_PROTOCOL *This, | |
IN CONST XENSTORE_TRANSACTION *Transaction, | |
IN CONST CHAR8 *Node, | |
OUT VOID **Value | |
); | |
XENSTORE_STATUS | |
EFIAPI | |
XenBusXenStoreRemove ( | |
IN XENBUS_PROTOCOL *This, | |
IN CONST XENSTORE_TRANSACTION *Transaction, | |
IN CONST CHAR8 *Node | |
); | |
XENSTORE_STATUS | |
EFIAPI | |
XenBusXenStoreTransactionStart ( | |
IN XENBUS_PROTOCOL *This, | |
OUT XENSTORE_TRANSACTION *Transaction | |
); | |
XENSTORE_STATUS | |
EFIAPI | |
XenBusXenStoreTransactionEnd ( | |
IN XENBUS_PROTOCOL *This, | |
IN CONST XENSTORE_TRANSACTION *Transaction, | |
IN BOOLEAN Abort | |
); | |
XENSTORE_STATUS | |
EFIAPI | |
XenBusXenStoreSPrint ( | |
IN XENBUS_PROTOCOL *This, | |
IN CONST XENSTORE_TRANSACTION *Transaction, | |
IN CONST CHAR8 *DirectoryPath, | |
IN CONST CHAR8 *Node, | |
IN CONST CHAR8 *FormatString, | |
... | |
); | |
XENSTORE_STATUS | |
EFIAPI | |
XenBusRegisterWatch ( | |
IN XENBUS_PROTOCOL *This, | |
IN CONST CHAR8 *Node, | |
OUT VOID **Token | |
); | |
XENSTORE_STATUS | |
EFIAPI | |
XenBusRegisterWatchBackend ( | |
IN XENBUS_PROTOCOL *This, | |
IN CONST CHAR8 *Node, | |
OUT VOID **Token | |
); | |
VOID | |
EFIAPI | |
XenBusUnregisterWatch ( | |
IN XENBUS_PROTOCOL *This, | |
IN VOID *Token | |
); | |
#endif /* _XEN_XENSTORE_XENSTOREVAR_H */ |