[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH] Add XENBUS_STORE and XENBUS_SUSPEND interfaces to exported set
To advertise driver distribution information to xenstore XENNET needs to make use of the XENBUS_STORE and XENBUS_SUSPEND interfaces. As XENVIF is XENNET's parent driver, it must export them. Adding them to the exported set also requires update of the PDO revision number. Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> Import updated store_interface.h from XENBUS and revised commit comment. Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx> --- include/revision.h | 11 +++++--- include/store_interface.h | 68 ++++++++++++++++++++++++++++++++++++++++++++--- src/coinst/coinst.c | 2 +- src/xenvif/pdo.c | 32 +++++++++++++++++++--- 4 files changed, 100 insertions(+), 13 deletions(-) diff --git a/include/revision.h b/include/revision.h index e2decd0..77d1405 100644 --- a/include/revision.h +++ b/include/revision.h @@ -35,10 +35,13 @@ // Key: // C - XENBUS_CACHE_INTERFACE // V - XENVIF_VIF_INTERFACE +// ST - XENBUS_STORE_INTERFACE +// SU - XENBUS_SUSPEND_INTERFACE -// REVISION C V -#define DEFINE_REVISION_TABLE \ - DEFINE_REVISION(0x08000002, 1, 2), \ - DEFINE_REVISION(0x08000003, 1, 3) +// REVISION C V ST SU +#define DEFINE_REVISION_TABLE \ + DEFINE_REVISION(0x08000002, 1, 2, 0, 0), \ + DEFINE_REVISION(0x08000003, 1, 3, 0, 0), \ + DEFINE_REVISION(0x08000004, 1, 3, 2, 1) #endif // _REVISION_H diff --git a/include/store_interface.h b/include/store_interface.h index 5bcbba3..52f1a1d 100644 --- a/include/store_interface.h +++ b/include/store_interface.h @@ -50,6 +50,23 @@ typedef struct _XENBUS_STORE_TRANSACTION XENBUS_STORE_TRANSACTION, *PXENBUS_S */ typedef struct _XENBUS_STORE_WATCH XENBUS_STORE_WATCH, *PXENBUS_STORE_WATCH; +/*! \typedef XENBUS_STORE_PERMISSION_MASK + \brief Bitmask of XenStore key permissions +*/ +typedef enum _XENBUS_STORE_PERMISSION_MASK { + XENBUS_STORE_PERM_NONE = 0, + XENBUS_STORE_PERM_READ = 1, + XENBUS_STORE_PERM_WRITE = 2, +} XENBUS_STORE_PERMISSION_MASK; + +/*! \typedef XENBUS_STORE_PERMISSION + \brief XenStore key permissions entry for a single domain +*/ +typedef struct _XENBUS_STORE_PERMISSION { + USHORT Domain; + XENBUS_STORE_PERMISSION_MASK Mask; +} XENBUS_STORE_PERMISSION, *PXENBUS_STORE_PERMISSION; + /*! \typedef XENBUS_STORE_ACQUIRE \brief Acquire a reference to the STORE interface @@ -247,10 +264,36 @@ typedef VOID IN PINTERFACE Interface ); +/*! \typedef XENBUS_STORE_PERMISSIONS_SET + \brief Set permissions for a XenStore key + + \param Interface The interface header + \param Transaction The transaction handle (NULL if this is not + part of a transaction) + \param Prefix An optional prefix for the \a Node + \param Node The concatenation of the \a Prefix and this value specifies + the XenStore key to set permissions of + \param Permissions An array of permissions to set + \param NumberPermissions Number of elements in the \a Permissions array +*/ +typedef NTSTATUS +(*XENBUS_STORE_PERMISSIONS_SET)( + IN PINTERFACE Interface, + IN PXENBUS_STORE_TRANSACTION Transaction OPTIONAL, + IN PCHAR Prefix OPTIONAL, + IN PCHAR Node, + IN PXENBUS_STORE_PERMISSION Permissions, + IN ULONG NumberPermissions + ); + // {86824C3B-D34E-4753-B281-2F1E3AD214D7} DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE, 0x86824c3b, 0xd34e, 0x4753, 0xb2, 0x81, 0x2f, 0x1e, 0x3a, 0xd2, 0x14, 0xd7); +/*! \struct _XENBUS_STORE_INTERFACE_V1 + \brief STORE interface version 1 + \ingroup interfaces +*/ struct _XENBUS_STORE_INTERFACE_V1 { INTERFACE Interface; XENBUS_STORE_ACQUIRE StoreAcquire; @@ -267,11 +310,28 @@ struct _XENBUS_STORE_INTERFACE_V1 { XENBUS_STORE_POLL StorePoll; }; -/*! \struct _XENBUS_STORE_INTERFACE_V1 - \brief STORE interface version 1 +/*! \struct _XENBUS_STORE_INTERFACE_V2 + \brief STORE interface version 2 \ingroup interfaces */ -typedef struct _XENBUS_STORE_INTERFACE_V1 XENBUS_STORE_INTERFACE, *PXENBUS_STORE_INTERFACE; +struct _XENBUS_STORE_INTERFACE_V2 { + INTERFACE Interface; + XENBUS_STORE_ACQUIRE StoreAcquire; + XENBUS_STORE_RELEASE StoreRelease; + XENBUS_STORE_FREE StoreFree; + XENBUS_STORE_READ StoreRead; + XENBUS_STORE_PRINTF StorePrintf; + XENBUS_STORE_PERMISSIONS_SET StorePermissionsSet; + XENBUS_STORE_REMOVE StoreRemove; + XENBUS_STORE_DIRECTORY StoreDirectory; + XENBUS_STORE_TRANSACTION_START StoreTransactionStart; + XENBUS_STORE_TRANSACTION_END StoreTransactionEnd; + XENBUS_STORE_WATCH_ADD StoreWatchAdd; + XENBUS_STORE_WATCH_REMOVE StoreWatchRemove; + XENBUS_STORE_POLL StorePoll; +}; + +typedef struct _XENBUS_STORE_INTERFACE_V2 XENBUS_STORE_INTERFACE, *PXENBUS_STORE_INTERFACE; /*! \def XENBUS_STORE \brief Macro at assist in method invocation @@ -282,7 +342,7 @@ typedef struct _XENBUS_STORE_INTERFACE_V1 XENBUS_STORE_INTERFACE, *PXENBUS_STORE #endif // _WINDLL #define XENBUS_STORE_INTERFACE_VERSION_MIN 1 -#define XENBUS_STORE_INTERFACE_VERSION_MAX 1 +#define XENBUS_STORE_INTERFACE_VERSION_MAX 2 #endif // _XENBUS_STORE_INTERFACE_H diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c index 156a6a3..0d792f7 100644 --- a/src/coinst/coinst.c +++ b/src/coinst/coinst.c @@ -717,7 +717,7 @@ fail1: return FALSE; } -#define DEFINE_REVISION(_N, _C, _V) \ +#define DEFINE_REVISION(_N, _C, _V, _ST, _SU) \ (_N) static DWORD DeviceRevision[] = { diff --git a/src/xenvif/pdo.c b/src/xenvif/pdo.c index 53bed7a..07cf23a 100644 --- a/src/xenvif/pdo.c +++ b/src/xenvif/pdo.c @@ -534,10 +534,12 @@ typedef struct _XENVIF_PDO_REVISION { ULONG Number; ULONG CacheInterfaceVersion; ULONG VifInterfaceVersion; + ULONG StoreInterfaceVersion; + ULONG SuspendInterfaceVersion; } XENVIF_PDO_REVISION, *PXENVIF_PDO_REVISION; -#define DEFINE_REVISION(_N, _C, _V) \ - { (_N), (_C), (_V) } +#define DEFINE_REVISION(_N, _C, _V, _ST, _SU) \ + { (_N), (_C), (_V), (_ST), (_SU) } static XENVIF_PDO_REVISION PdoRevision[] = { DEFINE_REVISION_TABLE @@ -567,14 +569,34 @@ PdoDumpRevisions( ASSERT(IMPLY(Index == ARRAYSIZE(PdoRevision) - 1, Revision->VifInterfaceVersion == XENVIF_VIF_INTERFACE_VERSION_MAX)); + if (Revision->StoreInterfaceVersion == 0) { // not-supported + ASSERT(Index != ARRAYSIZE(PdoRevision) - 1); + goto show_revision; + } + + ASSERT3U(Revision->StoreInterfaceVersion, >=, XENBUS_STORE_INTERFACE_VERSION_MIN); + ASSERT3U(Revision->StoreInterfaceVersion, <=, XENBUS_STORE_INTERFACE_VERSION_MAX); + ASSERT(IMPLY(Index == ARRAYSIZE(PdoRevision) - 1, + Revision->StoreInterfaceVersion == XENBUS_STORE_INTERFACE_VERSION_MAX)); + + ASSERT3U(Revision->SuspendInterfaceVersion, >=, XENBUS_SUSPEND_INTERFACE_VERSION_MIN); + ASSERT3U(Revision->SuspendInterfaceVersion, <=, XENBUS_SUSPEND_INTERFACE_VERSION_MAX); + ASSERT(IMPLY(Index == ARRAYSIZE(PdoRevision) - 1, + Revision->SuspendInterfaceVersion == XENBUS_SUSPEND_INTERFACE_VERSION_MAX)); + +show_revision: ASSERT3U(Revision->Number >> 24, ==, MAJOR_VERSION); Info("%08X -> " "CACHE v%u " - "VIF v%u\n", + "VIF v%u " + "STORE v%u " + "SUSPEND v%u\n", Revision->Number, Revision->CacheInterfaceVersion, - Revision->VifInterfaceVersion); + Revision->VifInterfaceVersion, + Revision->StoreInterfaceVersion, + Revision->SuspendInterfaceVersion); } } @@ -1628,6 +1650,8 @@ struct _INTERFACE_ENTRY PdoInterfaceTable[] = { { &GUID_BUS_INTERFACE_STANDARD, "BUS_INTERFACE", PdoQueryBusInterface }, { &GUID_XENVIF_VIF_INTERFACE, "VIF_INTERFACE", PdoQueryVifInterface }, { &GUID_XENBUS_CACHE_INTERFACE, "CACHE_INTERFACE", PdoDelegateIrp }, + { &GUID_XENBUS_STORE_INTERFACE, "STORE_INTERFACE", PdoDelegateIrp }, + { &GUID_XENBUS_SUSPEND_INTERFACE, "SUSPEND_INTERFACE", PdoDelegateIrp }, { NULL, NULL, NULL } }; -- 2.1.1 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |