The "XenBus.c", "XenStore.c", "XenStore.h" files under "OvmfPkg/XenBusDxe" include the MIT License text. Replace those license blocks with "SPDX-License-Identifier: MIT" (which refers to <https://spdx.org/licenses/MIT.html>) for easier parsing by machines (and humans). This follows the tree-wide adoption of "SPDX-License-Identifier"s, made for <https://bugzilla.tianocore.org/show_bug.cgi?id=1373>. Cc: Anthony Perard <anthony.perard@citrix.com> Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Julien Grall <julien.grall@arm.com> Cc: Lars Kurth <lars.kurth@citrix.com> Cc: xen-devel@lists.xenproject.org Bugzilla: https://bugzilla.tianocore.org/show_bug.cgi?id=1654 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Anthony PERARD <anthony.perard@citrix.com>
		
			
				
	
	
		
			365 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			365 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @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:
 | |
| 
 | |
|   SPDX-License-Identifier: MIT
 | |
| **/
 | |
| 
 | |
| #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
 | |
| EFIAPI
 | |
| 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 suppressed, 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 */
 |