Author: fireball
Date: Fri Jan 5 16:48:46 2007
New Revision: 25307
URL:
http://svn.reactos.org/svn/reactos?rev=25307&view=rev
Log:
Dump of changes I made to the usb2.6 branch a while ago, most probably it's my last
commit to this branch. If noone else picks it up, it's going into
"unmaintained" directory soon.
WARNING: These changes include debug/tracing like changes (including calls to
DbgBreakPoint(), allocation unneeded buffers, etc), so please check the diff thoroughly if
you want to try it. And even more, these changes aren't guaranteed to compile at
all...
Modified:
branches/usb2_6/reactos/drivers/usb/miniport/common/fdo.c
branches/usb2_6/reactos/drivers/usb/miniport/common/usbcommon_types.h
branches/usb2_6/reactos/drivers/usb/miniport/linux/asm/bitops.h
branches/usb2_6/reactos/drivers/usb/miniport/linux/linux_wrapper.h
branches/usb2_6/reactos/drivers/usb/miniport/sys/linuxwrapper.c
branches/usb2_6/reactos/drivers/usb/miniport/usb_wrapper.h
branches/usb2_6/reactos/drivers/usb/miniport/usbuhci/uhci-debug.c
branches/usb2_6/reactos/drivers/usb/miniport/usbuhci/uhci-hcd.c
branches/usb2_6/reactos/drivers/usb/miniport/usbuhci/uhci-hcd.h
branches/usb2_6/reactos/drivers/usb/miniport/usbuhci/uhci.c
branches/usb2_6/reactos/drivers/usb/usbport/hcd-pci.c
branches/usb2_6/reactos/drivers/usb/usbport/hcd.c
branches/usb2_6/reactos/drivers/usb/usbport/hub.c
Modified: branches/usb2_6/reactos/drivers/usb/miniport/common/fdo.c
URL:
http://svn.reactos.org/svn/reactos/branches/usb2_6/reactos/drivers/usb/mini…
==============================================================================
--- branches/usb2_6/reactos/drivers/usb/miniport/common/fdo.c (original)
+++ branches/usb2_6/reactos/drivers/usb/miniport/common/fdo.c Fri Jan 5 16:48:46 2007
@@ -86,6 +86,8 @@
PUSBMP_DEVICE_EXTENSION DeviceExtension;
PCM_RESOURCE_LIST AllocatedResources;
ULONG Size;
+ USHORT FunctionNum, DeviceNum;
+ ULONG propAddress;
NTSTATUS Status;
if (DeviceObject == KeyboardFdo || DeviceObject == MouseFdo)
@@ -207,16 +209,23 @@
DeviceExtension->PhysicalDeviceObject,
DevicePropertyAddress,
Size,
- &DeviceExtension->SystemIoSlotNumber,
+ &propAddress,
&Size);
+ DeviceExtension->SystemIoSlotNumber.u.AsULONG = 0;
+
if (!NT_SUCCESS(Status))
{
DPRINT1("USBMP: IoGetDeviceProperty DevicePropertyAddress failed\n");
- DeviceExtension->SystemIoSlotNumber = 0;
- }
-
- DPRINT("USBMP: Slotnumber 0x%x\n", DeviceExtension->SystemIoSlotNumber);
+ }
+
+ FunctionNum = (USHORT)((propAddress) & 0x0000FFFF);
+ DeviceNum = (USHORT)(((propAddress) >> 16) & 0x0000FFFF);
+
+ DeviceExtension->SystemIoSlotNumber.u.bits.DeviceNumber = DeviceNum;
+ DeviceExtension->SystemIoSlotNumber.u.bits.FunctionNumber = FunctionNum;
+
+ DPRINT("USBMP: Slotnumber 0x%x, Device: 0x%x, Func: 0x%x\n",
DeviceExtension->SystemIoSlotNumber.u.AsULONG, DeviceNum, FunctionNum);
/* Init wrapper with this object */
return InitLinuxWrapper(DeviceObject);
Modified: branches/usb2_6/reactos/drivers/usb/miniport/common/usbcommon_types.h
URL:
http://svn.reactos.org/svn/reactos/branches/usb2_6/reactos/drivers/usb/mini…
==============================================================================
--- branches/usb2_6/reactos/drivers/usb/miniport/common/usbcommon_types.h (original)
+++ branches/usb2_6/reactos/drivers/usb/miniport/common/usbcommon_types.h Fri Jan 5
16:48:46 2007
@@ -33,7 +33,7 @@
ULONG Flags;
//ULONG AdapterInterfaceType;
ULONG SystemIoBusNumber;
- ULONG SystemIoSlotNumber;
+ PCI_SLOT_NUMBER SystemIoSlotNumber;
//LIST_ENTRY AddressMappingListHead;
// DMA stuff, and buffers
Modified: branches/usb2_6/reactos/drivers/usb/miniport/linux/asm/bitops.h
URL:
http://svn.reactos.org/svn/reactos/branches/usb2_6/reactos/drivers/usb/mini…
==============================================================================
--- branches/usb2_6/reactos/drivers/usb/miniport/linux/asm/bitops.h (original)
+++ branches/usb2_6/reactos/drivers/usb/miniport/linux/asm/bitops.h Fri Jan 5 16:48:46
2007
@@ -41,16 +41,10 @@
:"=m" (ADDR)
:"Ir" (nr));
#elif defined(_MSC_VER)
- __asm {
- mov eax, nr
- mov ecx, addr
- lock bts [ecx], eax
- setc al
- };
-#else
InterlockedBitTestAndSet(addr, nr);
-#endif
-
+#else
+#error Unknown compiler for inline assembler!
+#endif
}
/**
@@ -180,12 +174,7 @@
return oldbit;
#elif defined(_MSC_VER)
- __asm {
- mov eax, nr
- mov ecx, addr
- lock bts [ecx], eax
- setc al
- };
+ return InterlockedBitTestAndSet(addr, nr);
#else
#error Unknown compiler for inline assembler
#endif
@@ -211,12 +200,7 @@
:"Ir" (nr));
return oldbit;
#elif defined(_MSC_VER)
- __asm {
- mov eax, nr
- mov ecx, addr
- lock bts [ecx], eax
- setc al
- };
+ return test_and_set_bit(nr, addr);
#else
#error Unknown compiler for inline assembler
#endif
@@ -241,12 +225,7 @@
:"Ir" (nr) : "memory");
return oldbit;
#elif defined(_MSC_VER)
- __asm {
- mov eax, nr
- mov ecx, addr
- lock btr [ecx], eax
- setc al
- };
+ return InterlockedBitTestAndReset(addr, nr);
#else
#error Unknown compiler for inline assembler
#endif
@@ -272,17 +251,13 @@
:"Ir" (nr));
return oldbit;
#elif defined(_MSC_VER)
- __asm {
- mov eax, nr
- mov ecx, addr
- lock btr [ecx], eax
- setc al
- };
-#else
-#error Unknown compiler for inline assembler
-#endif
-}
-
+ test_and_clear_bit(nr, addr);
+#else
+#error Unknown compiler for inline assembler
+#endif
+}
+
+#ifdef THIS_IS_NOT_USED
/* WARNING: non atomic and it can be reordered! */
static __inline int __test_and_change_bit(int nr, volatile void * addr)
{
@@ -335,6 +310,8 @@
#error Unknown compiler for inline assembler
#endif
}
+
+#endif /* THIS_IS_NOT_USED */
#if 0 /* Fool kernel-doc since it doesn't do macros yet */
/**
Modified: branches/usb2_6/reactos/drivers/usb/miniport/linux/linux_wrapper.h
URL:
http://svn.reactos.org/svn/reactos/branches/usb2_6/reactos/drivers/usb/mini…
==============================================================================
--- branches/usb2_6/reactos/drivers/usb/miniport/linux/linux_wrapper.h (original)
+++ branches/usb2_6/reactos/drivers/usb/miniport/linux/linux_wrapper.h Fri Jan 5 16:48:46
2007
@@ -48,6 +48,7 @@
#endif
typedef int irqreturn_t;
typedef unsigned long kernel_ulong_t;
+typedef unsigned long gfp_t;
typedef KEVENT wait_queue_head_t;
/*------------------------------------------------------------------------*/
@@ -593,7 +594,8 @@
#define dma_pool_free(a,b,c) pci_pool_free(a,b,c)
#define dma_pool_destroy(a) pci_pool_destroy(a)
-#define dma_alloc_coherent(dev,sz,dma_handle,gfp)
my_pci_alloc_consistent(to_pci_dev(dev), sz, dma_handle);
+#define dma_alloc_coherent(dev,sz,dma_handle,gfp) my_dma_alloc_coherent(dev, sz,
dma_handle, gfp)
+void *my_dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
gfp_t flag);
#define dma_free_coherent(dev,sz,vaddr,dma_handle) DPRINT1("dma_free_coherent
UNIMPLEMENTED!\n");
#define dma_map_single(a,b,c,d) my_dma_map_single(a,b,c,d)
@@ -726,10 +728,11 @@
( ((type)(x) < (type)(y)) ? (type)(x): (type)(y) )
#endif
-/*#define container_of(ptr, type, member) ({ \
+#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
- (type *)( (char *)__mptr - offsetof(type,member) );})*/
-#define container_of(ptr, type, member) CONTAINING_RECORD(ptr, type, member)
+ (type *)( (char *)__mptr - offsetof(type,member) );})
+
+//#define container_of(ptr, type, member) CONTAINING_RECORD(ptr, type, member)
/* from linux/stddef.h */
Modified: branches/usb2_6/reactos/drivers/usb/miniport/sys/linuxwrapper.c
URL:
http://svn.reactos.org/svn/reactos/branches/usb2_6/reactos/drivers/usb/mini…
==============================================================================
--- branches/usb2_6/reactos/drivers/usb/miniport/sys/linuxwrapper.c (original)
+++ branches/usb2_6/reactos/drivers/usb/miniport/sys/linuxwrapper.c Fri Jan 5 16:48:46
2007
@@ -701,7 +701,7 @@
set_bit (block, &pool->pages[page].bitmap[map]);
pool->blocks_allocated--;
- //DPRINT("pci_pool_free(): alloc'd: %d\n", pool->blocks_allocated);
+ DPRINT("pci_pool_free(): alloc'd: %d\n", pool->blocks_allocated);
}
/*
@@ -725,10 +725,11 @@
ExFreePool(pool);
}
+// the code here is identical to dma_alloc_coherent
void *my_pci_alloc_consistent(struct pci_dev *hwdev, size_t size, dma_addr_t
*dma_handle)
{
PUSBMP_DEVICE_EXTENSION devExt = (PUSBMP_DEVICE_EXTENSION)hwdev->dev_ext;
- DPRINT1("pci_alloc_consistent() size=%d\n", size);
+ DPRINT1("pci_alloc_consistent() size=%d, dma_handle=%p\n", size,
(PPHYSICAL_ADDRESS)dma_handle);
return
devExt->pDmaAdapter->DmaOperations->AllocateCommonBuffer(devExt->pDmaAdapter,
size, (PPHYSICAL_ADDRESS)dma_handle, FALSE); //FIXME: Cache-enabled?
}
@@ -818,6 +819,23 @@
{
my_dma_unmap_single(&hwdev->dev, dma_addr, size, direction);
}
+
+// the code here is very similar to pci_alloc_consistent()
+void *my_dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
gfp_t flag)
+{
+ //struct pci_dev *pdev = to_pci_dev(dev);
+ //return my_pci_alloc_consistent(pdev, sz, dma_handle);
+
+ PUSBMP_DEVICE_EXTENSION devExt = (PUSBMP_DEVICE_EXTENSION)dev->dev_ext;
+ DPRINT1("dma_alloc_coherent() size=%d, dev=%p, dev_ext=%p, dma_handle=%p,
DmaAdapter=%p\n", size, dev, dev->dev_ext, (PPHYSICAL_ADDRESS)dma_handle,
devExt->pDmaAdapter);
+
+ return
devExt->pDmaAdapter->DmaOperations->AllocateCommonBuffer(devExt->pDmaAdapter,
size, (PPHYSICAL_ADDRESS)dma_handle, FALSE); //FIXME: Cache-enabled?
+
+}
+/*
+void dma_free_coherent(struct device *dev, size_t size,
+ void *vaddr, dma_addr_t dma_handle); */
+
/*------------------------------------------------------------------------*/
@@ -936,8 +954,8 @@
//FIXME: Is returning this value correct?
//FIXME: Mixing pci_dev and win structs isn't a good thing at all (though I doubt it
wants to access device in another slot/bus)
DPRINT1("pci_write_config_word: BusNum: %d, SlotNum: 0x%x, value: 0x%x, where:
0x%x\n",
- dev_ext->SystemIoBusNumber, dev_ext->SystemIoSlotNumber, val, where);
- return HalSetBusDataByOffset(PCIConfiguration, dev_ext->SystemIoBusNumber,
dev_ext->SystemIoSlotNumber, &val, where, sizeof(val));
+ dev_ext->SystemIoBusNumber, dev_ext->SystemIoSlotNumber.u.AsULONG, val, where);
+ return HalSetBusDataByOffset(PCIConfiguration, dev_ext->SystemIoBusNumber,
dev_ext->SystemIoSlotNumber.u.AsULONG, &val, where, sizeof(val));
}
/*------------------------------------------------------------------------*/
@@ -950,9 +968,9 @@
//FIXME: Is returning this value correct?
//FIXME: Mixing pci_dev and win structs isn't a good thing at all
- result = HalGetBusDataByOffset(PCIConfiguration, dev_ext->SystemIoBusNumber,
dev_ext->SystemIoSlotNumber, val, where, sizeof(*val));
+ result = HalGetBusDataByOffset(PCIConfiguration, dev_ext->SystemIoBusNumber,
dev_ext->SystemIoSlotNumber.u.AsULONG, val, where, sizeof(*val));
DPRINT1("pci_read_config_word: BusNum: %d, SlotNum: 0x%x, value: 0x%x, where:
0x%x\n",
- dev_ext->SystemIoBusNumber, dev_ext->SystemIoSlotNumber, *val, where);
+ dev_ext->SystemIoBusNumber, dev_ext->SystemIoSlotNumber.u.AsULONG, *val, where);
return result;
}
Modified: branches/usb2_6/reactos/drivers/usb/miniport/usb_wrapper.h
URL:
http://svn.reactos.org/svn/reactos/branches/usb2_6/reactos/drivers/usb/mini…
==============================================================================
--- branches/usb2_6/reactos/drivers/usb/miniport/usb_wrapper.h (original)
+++ branches/usb2_6/reactos/drivers/usb/miniport/usb_wrapper.h Fri Jan 5 16:48:46 2007
@@ -22,10 +22,18 @@
#if defined(_MSC_VER)
#define BitScanForward _BitScanForward
#define BitScanReverse _BitScanReverse
+#define InterlockedBitTestAndSet _interlockedbittestandset
+#define InterlockedBitTestAndReset _interlockedbittestandreset
+
BOOLEAN _BitScanForward (OUT ULONG *Index, IN ULONG Mask);
BOOLEAN _BitScanReverse (OUT ULONG *Index, IN ULONG Mask);
+BOOLEAN _interlockedbittestandset (IN LONG *Base, IN LONG Offset);
+BOOLEAN _interlockedbittestandreset (IN LONG *Base, IN LONG Offset);
+
#pragma intrinsic(_BitScanForward)
#pragma intrinsic(_BitScanReverse)
+#pragma intrinsic(_interlockedbittestandset)
+#pragma intrinsic(_interlockedbittestandreset)
#define inline __inline
#endif
Modified: branches/usb2_6/reactos/drivers/usb/miniport/usbuhci/uhci-debug.c
URL:
http://svn.reactos.org/svn/reactos/branches/usb2_6/reactos/drivers/usb/mini…
==============================================================================
--- branches/usb2_6/reactos/drivers/usb/miniport/usbuhci/uhci-debug.c (original)
+++ branches/usb2_6/reactos/drivers/usb/miniport/usbuhci/uhci-debug.c Fri Jan 5 16:48:46
2007
@@ -144,7 +144,7 @@
out += sprintf(out, "%*s Element != First TD\n", space, "");
while (tmp != head) {
- struct uhci_td *td = list_entry(tmp, struct uhci_td, list);
+ /*struct uhci_td **/td = list_entry(tmp, struct uhci_td, list);
tmp = tmp->next;
Modified: branches/usb2_6/reactos/drivers/usb/miniport/usbuhci/uhci-hcd.c
URL:
http://svn.reactos.org/svn/reactos/branches/usb2_6/reactos/drivers/usb/mini…
==============================================================================
--- branches/usb2_6/reactos/drivers/usb/miniport/usbuhci/uhci-hcd.c (original)
+++ branches/usb2_6/reactos/drivers/usb/miniport/usbuhci/uhci-hcd.c Fri Jan 5 16:48:46
2007
@@ -561,6 +561,30 @@
dma_addr_t dma_handle;
struct dentry *dentry;
+ /* TEST BEGIN */
+ {
+ /* Test code by Fireball */
+ dma_addr_t dma_handle;
+ void *res;
+ struct uhci_hcd *uhci = (struct uhci_hcd *) (hcd->hcd_priv);//hcd_to_uhci(hcd);
+ struct usb_hcd *new_hcd = container_of((void *) uhci, struct usb_hcd, hcd_priv); //
uhci_to_hcd(uhci)
+
+ struct device *dv = new_hcd->self.controller; //uhci_dev(uhci);
+
+ DPRINT1("hcd: %p, hcd->self.controller: %p\n", hcd,
hcd->self.controller);
+ DPRINT1("new_hcd: %p, dv: %p, uhci_dev(uhci): %p\n", new_hcd, dv,
uhci_dev(uhci));
+ DPRINT1("uhci: %p, dv->dev_ext: %p\n", uhci, dv->dev_ext);
+
+ //dv.dev_ext = (((struct device *)(hcd->self.controller))->dev_ext);
+ //res = dma_alloc_coherent(dv, 8192, &dma_handle, 0);
+ uhci->fl = dma_alloc_coherent(dv, sizeof(*uhci->fl), &dma_handle, 0);
+ }
+
+ uhci->fl = dma_alloc_coherent(uhci_dev(uhci), sizeof(*uhci->fl),
+ &dma_handle, 0);
+ return;
+ /* TEST END */
+
hcd->uses_new_polling = 1;
if (pci_find_capability(to_pci_dev(uhci_dev(uhci)), PCI_CAP_ID_PM))
hcd->can_wakeup = 1; /* Assume it supports PME# */
@@ -898,7 +922,7 @@
NULL, NULL,
#endif
- /*.stop =*/ uhci_stop,
+ /*.stop =*/ uhci_stop,
/*.get_frame_number =*/ uhci_hcd_get_frame_number,
/*.urb_enqueue =*/ uhci_urb_enqueue,
Modified: branches/usb2_6/reactos/drivers/usb/miniport/usbuhci/uhci-hcd.h
URL:
http://svn.reactos.org/svn/reactos/branches/usb2_6/reactos/drivers/usb/mini…
==============================================================================
--- branches/usb2_6/reactos/drivers/usb/miniport/usbuhci/uhci-hcd.h (original)
+++ branches/usb2_6/reactos/drivers/usb/miniport/usbuhci/uhci-hcd.h Fri Jan 5 16:48:46
2007
@@ -421,7 +421,14 @@
return container_of((void *) uhci, struct usb_hcd, hcd_priv);
}
-#define uhci_dev(u) (uhci_to_hcd(u)->self.controller)
+//#define uhci_dev(u) (uhci_to_hcd(u)->self.controller)
+static struct device *uhci_dev(struct uhci_hcd *uhci)
+{
+ //struct uhci_hcd *uhci = (struct uhci_hcd *) (hcd->hcd_priv);//hcd_to_uhci(hcd);
+ struct usb_hcd *new_hcd = container_of((void *) uhci, struct usb_hcd, hcd_priv); //
uhci_to_hcd(uhci)
+
+ return new_hcd->self.controller; //uhci_dev(uhci);
+}
struct urb_priv {
struct list_head urb_list;
Modified: branches/usb2_6/reactos/drivers/usb/miniport/usbuhci/uhci.c
URL:
http://svn.reactos.org/svn/reactos/branches/usb2_6/reactos/drivers/usb/mini…
==============================================================================
--- branches/usb2_6/reactos/drivers/usb/miniport/usbuhci/uhci.c (original)
+++ branches/usb2_6/reactos/drivers/usb/miniport/usbuhci/uhci.c Fri Jan 5 16:48:46 2007
@@ -25,7 +25,7 @@
/* Initialize generic linux structure */
dev->irq = DeviceExtension->InterruptVector;
dev->dev_ext = (PVOID)DeviceExtension;
- dev->dev.dev_ext = DeviceObject;
+ dev->dev.dev_ext = (PVOID)DeviceExtension; /*DeviceObject*/
dev->slot_name = ExAllocatePoolWithTag(NonPagedPool, 128, USB_UHCI_TAG); // 128 max
len for slot name
dev->bus = ExAllocatePoolWithTag(NonPagedPool, sizeof(struct usb_bus), USB_UHCI_TAG);
//FIXME: Remove all this
// small allocations from non-paged pool, move them to big device extension
struct
@@ -36,7 +36,7 @@
strcpy(dev->dev.name, "UnivHCI PCI-USB Controller");
strcpy(dev->slot_name, "UHCD PCI Slot");
-
+
/* Init the HCD. Probe will be called automatically, but will fail because id=NULL */
Status = uhci_hcd_init();
if (!NT_SUCCESS(Status))
@@ -48,10 +48,21 @@
ExFreePoolWithTag(dev, USB_UHCI_TAG);
return Status;
}
+ DPRINT("uhci_hcd_init() done\n");
/* Init core usb */
usb_init();
DPRINT("usb_init() done\n");
+
+ {
+ /* Test code by Fireball */
+ struct device dev;
+ dma_addr_t dma_handle;
+ void *res;
+
+ dev.dev_ext = DeviceExtension;
+ res = dma_alloc_coherent(&dev, 12, &dma_handle, 0);
+ }
/* Probe device with real id now */
uhci_pci_driver.probe(dev, uhci_pci_ids);
Modified: branches/usb2_6/reactos/drivers/usb/usbport/hcd-pci.c
URL:
http://svn.reactos.org/svn/reactos/branches/usb2_6/reactos/drivers/usb/usbp…
==============================================================================
--- branches/usb2_6/reactos/drivers/usb/usbport/hcd-pci.c (original)
+++ branches/usb2_6/reactos/drivers/usb/usbport/hcd-pci.c Fri Jan 5 16:48:46 2007
@@ -66,6 +66,16 @@
int retval;
printk("usbcore: usb_hcd_pci_probe() called\n");
+
+ {
+ /* Test code by Fireball */
+ struct device dv;
+ dma_addr_t dma_handle;
+ void *res;
+
+ dv.dev_ext = dev->dev_ext;
+ res = dma_alloc_coherent(&dv, 12, &dma_handle, 0);
+ }
if (usb_disabled())
return -ENODEV;
@@ -131,6 +141,16 @@
// control by SMM/BIOS to control by Linux (if needed)
pci_set_drvdata (dev, hcd); // ReactOS-specific, needed in order to get pointer to
usb_hcd in any place.
pci_set_master (dev);
+
+ {
+ /* Test code by Fireball */
+ struct device dv;
+ dma_addr_t dma_handle;
+ void *res;
+
+ dv.dev_ext = dev->dev_ext;
+ res = dma_alloc_coherent(&dv, 12, &dma_handle, 0);
+ }
retval = usb_add_hcd (hcd, dev->irq, SA_SHIRQ);
if (retval != 0)
@@ -404,3 +424,4 @@
#endif /* CONFIG_PM */
+
Modified: branches/usb2_6/reactos/drivers/usb/usbport/hcd.c
URL:
http://svn.reactos.org/svn/reactos/branches/usb2_6/reactos/drivers/usb/usbp…
==============================================================================
--- branches/usb2_6/reactos/drivers/usb/usbport/hcd.c (original)
+++ branches/usb2_6/reactos/drivers/usb/usbport/hcd.c Fri Jan 5 16:48:46 2007
@@ -1776,6 +1776,8 @@
/* Although in principle hcd->driver->start() might need to use rhdev,
* none of the current drivers do.
*/
+
+DbgBreakPoint();
if ((retval = hcd->driver->start(hcd)) < 0) {
dev_err(hcd->self.controller, "startup error %d\n", retval);
goto err_hcd_driver_start;
Modified: branches/usb2_6/reactos/drivers/usb/usbport/hub.c
URL:
http://svn.reactos.org/svn/reactos/branches/usb2_6/reactos/drivers/usb/usbp…
==============================================================================
--- branches/usb2_6/reactos/drivers/usb/usbport/hub.c (original)
+++ branches/usb2_6/reactos/drivers/usb/usbport/hub.c Fri Jan 5 16:48:46 2007
@@ -2758,6 +2758,7 @@
}
/* deal with port status changes */
+ ASSERT(hub->descriptor);
for (i = 1; i <= hub->descriptor->bNbrPorts; i++) {
if (test_bit(i, hub->busy_bits))
continue;
@@ -2885,7 +2886,7 @@
static int STDCALL hub_thread(void *__unused)
{
pr_debug("hub_thread starting");
-
+DbgBreakPoint();
do {
hub_events();
wait_event_interruptible(khubd_wait,