From 35c824d26fa4bc58bf7e1350f2a4a6c309ae7f67 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Fri, 27 Jan 2012 18:33:41 +0000 Subject: [PATCH] [USBCCGP] - Use Function index than interface number. Fixes invalid hardware ids - Fix construction of compatible id - USB Audio device now installs on XP when usbccgp is used - Now asserts in sb-bringup-trunk\drivers\usb\usbccgp\pdo.c:343) PDO_Dispatch Function f not implemented, which is implemented next svn path=/branches/usb-bringup-trunk/; revision=55255 --- drivers/usb/usbccgp/function.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/usb/usbccgp/function.c b/drivers/usb/usbccgp/function.c index cebe1d89cb4..1c531adda5d 100644 --- a/drivers/usb/usbccgp/function.c +++ b/drivers/usb/usbccgp/function.c @@ -514,6 +514,7 @@ NTSTATUS USBCCG_InitIdsWithInterfaceDescriptor( IN PFDO_DEVICE_EXTENSION FDODeviceExtension, IN PUSB_INTERFACE_DESCRIPTOR Descriptor, + IN ULONG FunctionIndex, OUT PUSBC_FUNCTION_DESCRIPTOR FunctionDescriptor) { ULONG Index; @@ -553,17 +554,16 @@ USBCCG_InitIdsWithInterfaceDescriptor( } - // // now init hardware id // Index = swprintf(Buffer, L"USB\\VID_%04x&PID_%04x&Rev_%04x&MI_%02x", FDODeviceExtension->DeviceDescriptor->idVendor, FDODeviceExtension->DeviceDescriptor->idProduct, FDODeviceExtension->DeviceDescriptor->bcdDevice, - Descriptor->bInterfaceNumber) + 1; + FunctionIndex) + 1; Index += swprintf(&Buffer[Index], L"USB\\VID_%04x&PID_%04x&MI_%02x", FDODeviceExtension->DeviceDescriptor->idVendor, FDODeviceExtension->DeviceDescriptor->idProduct, - Descriptor->bInterfaceNumber) + 1; + FunctionIndex) + 1; // allocate result buffer DescriptionBuffer = AllocateItem(NonPagedPool, (Index + 1) * sizeof(WCHAR)); @@ -581,13 +581,12 @@ USBCCG_InitIdsWithInterfaceDescriptor( FunctionDescriptor->HardwareId.Length = Index * sizeof(WCHAR); FunctionDescriptor->HardwareId.MaximumLength = (Index + 1) * sizeof(WCHAR); - // // now init the compatible id // Index = swprintf(Buffer, L"USB\\Class_%02x&SubClass_%02x&Prot_%02x", Descriptor->bInterfaceClass, Descriptor->bInterfaceSubClass, Descriptor->bInterfaceProtocol) + 1; - Index += swprintf(&Buffer[Index], L"USB\\Class_%04x&SubClass_%04x", Descriptor->bInterfaceClass, Descriptor->bInterfaceSubClass) + 1; - Index += swprintf(&Buffer[Index], L"USB\\Class_%04x", Descriptor->bInterfaceClass) + 1; + Index += swprintf(&Buffer[Index], L"USB\\Class_%02x&SubClass_%02x", Descriptor->bInterfaceClass, Descriptor->bInterfaceSubClass) + 1; + Index += swprintf(&Buffer[Index], L"USB\\Class_%02x", Descriptor->bInterfaceClass) + 1; // allocate result buffer DescriptionBuffer = AllocateItem(NonPagedPool, (Index + 1) * sizeof(WCHAR)); @@ -604,6 +603,11 @@ USBCCG_InitIdsWithInterfaceDescriptor( FunctionDescriptor->CompatibleId.Buffer = DescriptionBuffer; FunctionDescriptor->CompatibleId.Length = Index * sizeof(WCHAR); FunctionDescriptor->CompatibleId.MaximumLength = (Index + 1) * sizeof(WCHAR); + + // + // done + // + return STATUS_SUCCESS; } @@ -678,7 +682,7 @@ USBCCGP_LegacyEnum( // // now init the device ids // - Status = USBCCG_InitIdsWithInterfaceDescriptor(FDODeviceExtension, InterfaceDescriptor, &FDODeviceExtension->FunctionDescriptor[Index]); + Status = USBCCG_InitIdsWithInterfaceDescriptor(FDODeviceExtension, InterfaceDescriptor, Index, &FDODeviceExtension->FunctionDescriptor[Index]); if (!NT_SUCCESS(Status)) { // @@ -803,7 +807,7 @@ USBCCGP_EnumWithAudioLegacy( // // now init the device ids // - Status = USBCCG_InitIdsWithInterfaceDescriptor(FDODeviceExtension, InterfaceDescriptor, &FDODeviceExtension->FunctionDescriptor[0]); + Status = USBCCG_InitIdsWithInterfaceDescriptor(FDODeviceExtension, FirstDescriptor, 0, &FDODeviceExtension->FunctionDescriptor[0]); if (!NT_SUCCESS(Status)) { // -- 2.17.1