[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[win-pv-devel] [PATCH] Add registry tweak to make PDOs ejectable



Add a registry tweak called 'AllowPdoEject' so that PDOs can be made
ejectable and rename the tweak to make PDOs removable to 'AllowPdoRemove'
to bring it in line.

Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
 src/xenbus/pdo.c | 46 ++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 44 insertions(+), 2 deletions(-)

diff --git a/src/xenbus/pdo.c b/src/xenbus/pdo.c
index 495cf12..621f377 100644
--- a/src/xenbus/pdo.c
+++ b/src/xenbus/pdo.c
@@ -66,6 +66,7 @@ struct _XENBUS_PDO {
     const CHAR                  *Reason;
 
     BOOLEAN                     Removable;
+    BOOLEAN                     Ejectable;
 
     PULONG                      Revision;
     PWCHAR                      *Description;
@@ -280,7 +281,7 @@ __PdoSetRemovable(
         goto done;
 
     (VOID) RegistryQueryDwordValue(Key,
-                                   "Removable",
+                                   "AllowPdoRemove",
                                    &Value);
 
     RegistryCloseKey(Key);
@@ -297,6 +298,45 @@ __PdoIsRemovable(
     return Pdo->Removable;
 }
 
+static FORCEINLINE VOID
+__PdoSetEjectable(
+    IN  PXENBUS_PDO     Pdo
+    )
+{
+    HANDLE              ParametersKey;
+    HANDLE              Key;
+    ULONG               Value;
+    NTSTATUS            status;
+
+    Value = 1;
+
+    ParametersKey = DriverGetParametersKey();
+
+    status = RegistryOpenSubKey(ParametersKey,
+                                __PdoGetName(Pdo),
+                                KEY_READ,
+                                &Key);
+    if (!NT_SUCCESS(status))
+        goto done;
+
+    (VOID) RegistryQueryDwordValue(Key,
+                                   "AllowPdoEject",
+                                   &Value);
+
+    RegistryCloseKey(Key);
+
+done:
+    Pdo->Ejectable = (Value != 0) ? TRUE : FALSE;
+}
+
+static FORCEINLINE BOOLEAN
+__PdoIsEjectable(
+    IN  PXENBUS_PDO     Pdo
+    )
+{
+    return Pdo->Ejectable;
+}
+
 #define MAXTEXTLEN  1024
 
 static FORCEINLINE PXENBUS_FDO
@@ -1253,7 +1293,6 @@ PdoQueryCapabilities(
     Capabilities->DeviceD1 = 0;
     Capabilities->DeviceD2 = 0;
     Capabilities->LockSupported = 0;
-    Capabilities->EjectSupported = 0;
     Capabilities->DockDevice = 0;
     Capabilities->UniqueID = 1;
     Capabilities->SilentInstall = 1;
@@ -1263,6 +1302,7 @@ PdoQueryCapabilities(
 
     Capabilities->Removable = __PdoIsRemovable(Pdo) ? 1 : 0;
     Capabilities->SurpriseRemovalOK = Capabilities->Removable;
+    Capabilities->EjectSupported = __PdoIsEjectable(Pdo) ? 1 : 0;
 
     Capabilities->Address = 0xffffffff;
     Capabilities->UINumber = 0xffffffff;
@@ -2228,6 +2268,7 @@ PdoCreate(
 
     __PdoSetName(Pdo, Name);
     __PdoSetRemovable(Pdo);
+    __PdoSetEjectable(Pdo);
 
     status = PdoSetRevisions(Pdo);
     if (!NT_SUCCESS(status))
@@ -2345,6 +2386,7 @@ PdoDestroy(
     Pdo->Revision = NULL;
     Pdo->Count = 0;
 
+    Pdo->Ejectable = FALSE;
     Pdo->Removable = FALSE;
 
     ThreadAlert(Pdo->DevicePowerThread);
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.