[USBDRIVER]
authorCameron Gutman <aicommander@gmail.com>
Sun, 9 May 2010 11:18:16 +0000 (11:18 +0000)
committerCameron Gutman <aicommander@gmail.com>
Sun, 9 May 2010 11:18:16 +0000 (11:18 +0000)
- Register the device with the device manager only after it has been successfully allocated to avoid a crash
- A device that failed in xhci_alloc would never get deregistered from the device manager so it would crash when it entered xhci_start with a partially set up device extension
- Define release_adapter to HalPutDmaAdapter to fix a DMA adapter leak
[HAL]
- Export HalPutDmaAdapter

svn path=/trunk/; revision=47139

reactos/drivers/usb/nt4compat/usbdriver/ehci.c
reactos/drivers/usb/nt4compat/usbdriver/uhci.c
reactos/hal/hal.pspec

index 9bc6cd9..2d4b44e 100644 (file)
 
 #define endp_mult_count( endp ) ( ( ( endp->pusb_endp_desc->wMaxPacketSize & 0x1800 ) >> 11 ) + 1 )
 
-#if 0
-/* WTF?! */
-#define release_adapter( padapTER ) \
-{\
-    ( ( padapTER ) ); \
-}
-#else
-#define release_adapter( padapTER ) (void)(padapTER)
-#endif
+#define release_adapter( padapTER ) HalPutDmaAdapter(padapTER)
 
 #define get_int_idx( _urb, _idx ) \
 {\
@@ -3538,6 +3530,7 @@ ehci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
     CM_PARTIAL_RESOURCE_DESCRIPTOR *pprd;
     PCI_SLOT_NUMBER slot_num;
     NTSTATUS status;
+    UCHAR hcd_id;
 
 
     pdev = ehci_create_device(drvr_obj, dev_mgr);
@@ -3704,6 +3697,13 @@ ehci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
         return NULL;
     }
 
+    //register with dev_mgr
+    ehci_init_hcd_interface(pdev_ext->ehci);
+    hcd_id = dev_mgr_register_hcd(dev_mgr, &pdev_ext->ehci->hcd_interf);
+
+    pdev_ext->ehci->hcd_interf.hcd_set_id(&pdev_ext->ehci->hcd_interf, hcd_id);
+    pdev_ext->ehci->hcd_interf.hcd_set_dev_mgr(&pdev_ext->ehci->hcd_interf, dev_mgr);
+
     return pdev;
 }
 
@@ -3719,7 +3719,6 @@ ehci_create_device(PDRIVER_OBJECT drvr_obj, PUSB_DEV_MANAGER dev_mgr)
 
     STRING string, another_string;
     CHAR str_dev_name[64], str_symb_name[64];
-    UCHAR hcd_id;
 
     if (drvr_obj == NULL)
         return NULL;
@@ -3769,13 +3768,6 @@ ehci_create_device(PDRIVER_OBJECT drvr_obj, PUSB_DEV_MANAGER dev_mgr)
     RtlFreeUnicodeString(&dev_name);
     RtlFreeUnicodeString(&symb_name);
 
-    //register with dev_mgr though it is not initilized
-    ehci_init_hcd_interface(pdev_ext->ehci);
-    hcd_id = dev_mgr_register_hcd(dev_mgr, &pdev_ext->ehci->hcd_interf);
-
-    pdev_ext->ehci->hcd_interf.hcd_set_id(&pdev_ext->ehci->hcd_interf, hcd_id);
-    pdev_ext->ehci->hcd_interf.hcd_set_dev_mgr(&pdev_ext->ehci->hcd_interf, dev_mgr);
-
     return pdev;
 
 }
index c11fd2d..8c903d3 100644 (file)
@@ -65,15 +65,8 @@ extern PDEVICE_OBJECT ehci_probe(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_pa
   : enDP->pusb_endp_desc->wMaxPacketSize )
 
 
-#if 0
-/* WTF?! */
-#define release_adapter( padapTER ) \
-{\
-    ( ( padapTER ) ); \
-}
-#else
-#define release_adapter( padapTER ) (void)(padapTER)
-#endif
+#define release_adapter( padapTER ) HalPutDmaAdapter(padapTER)
+
 
 #define get_int_idx( _urb, _idx ) \
 {\
@@ -413,7 +406,6 @@ uhci_create_device(PDRIVER_OBJECT drvr_obj, PUSB_DEV_MANAGER dev_mgr)
 
     STRING string, another_string;
     CHAR str_dev_name[64], str_symb_name[64];
-    UCHAR hcd_id;
 
     if (drvr_obj == NULL)
         return NULL;
@@ -463,12 +455,6 @@ uhci_create_device(PDRIVER_OBJECT drvr_obj, PUSB_DEV_MANAGER dev_mgr)
     RtlFreeUnicodeString(&dev_name);
     RtlFreeUnicodeString(&symb_name);
 
-    //register with dev_mgr though it is not initilized
-    uhci_init_hcd_interface(pdev_ext->uhci);
-    hcd_id = dev_mgr_register_hcd(dev_mgr, &pdev_ext->uhci->hcd_interf);
-
-    pdev_ext->uhci->hcd_interf.hcd_set_id(&pdev_ext->uhci->hcd_interf, hcd_id);
-    pdev_ext->uhci->hcd_interf.hcd_set_dev_mgr(&pdev_ext->uhci->hcd_interf, dev_mgr);
     return pdev;
 }
 
@@ -695,6 +681,7 @@ uhci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
     CM_PARTIAL_RESOURCE_DESCRIPTOR *pprd;
     PCI_SLOT_NUMBER slot_num;
     NTSTATUS status;
+    UCHAR hcd_id;
 
 
     pdev = uhci_create_device(drvr_obj, dev_mgr);
@@ -860,6 +847,13 @@ uhci_alloc(PDRIVER_OBJECT drvr_obj, PUNICODE_STRING reg_path, ULONG bus_addr, PU
         return NULL;
     }
 
+    //register with dev_mgr
+    uhci_init_hcd_interface(pdev_ext->uhci);
+    hcd_id = dev_mgr_register_hcd(dev_mgr, &pdev_ext->uhci->hcd_interf);
+
+    pdev_ext->uhci->hcd_interf.hcd_set_id(&pdev_ext->uhci->hcd_interf, hcd_id);
+    pdev_ext->uhci->hcd_interf.hcd_set_dev_mgr(&pdev_ext->uhci->hcd_interf, dev_mgr);
+
     return pdev;
 }
 
index 7419304..0e6a7c7 100644 (file)
@@ -51,6 +51,7 @@
 @ stdcall HalInitializeProcessor(long ptr)
 @ stdcall HalMakeBeep(long)
 @ stdcall HalProcessorIdle()
+@ stdcall HalPutDmaAdapter(ptr)
 @ stdcall HalQueryDisplayParameters(ptr ptr ptr ptr)
 @ stdcall HalQueryRealTimeClock(ptr)
 @ stdcall HalReadDmaCounter(ptr)