- Add and fix missing exports
- Add UNIMPLEMENTED to unimplemented functions
- Fix completely broken USBD_GetPdoRegistryParameter (which wasn't even exported because somebody made a typo and couldn't figure it out)
- My Linksys USB300M driver now loads but it runs into some unimplemented code paths in usbehci

svn path=/branches/usb-bringup-trunk/; revision=55416
This commit is contained in:
Cameron Gutman 2012-02-04 18:39:09 +00:00
parent 9f4adfb8ee
commit 6e3fa77024
2 changed files with 63 additions and 12 deletions

View file

@ -102,6 +102,7 @@ USBD_Debug_LogEntry(PCHAR Name, ULONG_PTR Info1, ULONG_PTR Info2,
PVOID NTAPI PVOID NTAPI
USBD_AllocateDeviceName(ULONG Unknown) USBD_AllocateDeviceName(ULONG Unknown)
{ {
UNIMPLEMENTED
return NULL; return NULL;
} }
@ -139,6 +140,7 @@ USBD_CalculateUsbBandwidth(
ULONG NTAPI ULONG NTAPI
USBD_Dispatch(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3, ULONG Unknown4) USBD_Dispatch(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3, ULONG Unknown4)
{ {
UNIMPLEMENTED
return 1; return 1;
} }
@ -148,6 +150,7 @@ USBD_Dispatch(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3, ULONG Unknown4)
VOID NTAPI VOID NTAPI
USBD_FreeDeviceMutex(PVOID Unknown) USBD_FreeDeviceMutex(PVOID Unknown)
{ {
UNIMPLEMENTED
} }
/* /*
@ -156,6 +159,7 @@ USBD_FreeDeviceMutex(PVOID Unknown)
VOID NTAPI VOID NTAPI
USBD_FreeDeviceName(PVOID Unknown) USBD_FreeDeviceName(PVOID Unknown)
{ {
UNIMPLEMENTED
} }
/* /*
@ -164,6 +168,7 @@ USBD_FreeDeviceName(PVOID Unknown)
VOID NTAPI VOID NTAPI
USBD_WaitDeviceMutex(PVOID Unknown) USBD_WaitDeviceMutex(PVOID Unknown)
{ {
UNIMPLEMENTED
} }
/* /*
@ -172,6 +177,7 @@ USBD_WaitDeviceMutex(PVOID Unknown)
ULONG NTAPI ULONG NTAPI
USBD_GetSuspendPowerState(ULONG Unknown1) USBD_GetSuspendPowerState(ULONG Unknown1)
{ {
UNIMPLEMENTED
return 0; return 0;
} }
@ -182,6 +188,7 @@ NTSTATUS NTAPI
USBD_InitializeDevice(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3, USBD_InitializeDevice(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3,
ULONG Unknown4, ULONG Unknown5, ULONG Unknown6) ULONG Unknown4, ULONG Unknown5, ULONG Unknown6)
{ {
UNIMPLEMENTED
return STATUS_NOT_SUPPORTED; return STATUS_NOT_SUPPORTED;
} }
@ -193,6 +200,7 @@ USBD_RegisterHostController(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3,
ULONG Unknown4, ULONG Unknown5, ULONG Unknown6, ULONG Unknown7, ULONG Unknown4, ULONG Unknown5, ULONG Unknown6, ULONG Unknown7,
ULONG Unknown8, ULONG Unknown9, ULONG Unknown10) ULONG Unknown8, ULONG Unknown9, ULONG Unknown10)
{ {
UNIMPLEMENTED
return STATUS_NOT_SUPPORTED; return STATUS_NOT_SUPPORTED;
} }
@ -202,6 +210,7 @@ USBD_RegisterHostController(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3,
NTSTATUS NTAPI NTSTATUS NTAPI
USBD_GetDeviceInformation(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3) USBD_GetDeviceInformation(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3)
{ {
UNIMPLEMENTED
return STATUS_NOT_SUPPORTED; return STATUS_NOT_SUPPORTED;
} }
@ -212,6 +221,7 @@ NTSTATUS NTAPI
USBD_CreateDevice(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3, USBD_CreateDevice(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3,
ULONG Unknown4, ULONG Unknown5) ULONG Unknown4, ULONG Unknown5)
{ {
UNIMPLEMENTED
return STATUS_NOT_SUPPORTED; return STATUS_NOT_SUPPORTED;
} }
@ -221,6 +231,7 @@ USBD_CreateDevice(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3,
NTSTATUS NTAPI NTSTATUS NTAPI
USBD_RemoveDevice(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3) USBD_RemoveDevice(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3)
{ {
UNIMPLEMENTED
return STATUS_NOT_SUPPORTED; return STATUS_NOT_SUPPORTED;
} }
@ -230,6 +241,7 @@ USBD_RemoveDevice(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3)
VOID NTAPI VOID NTAPI
USBD_CompleteRequest(ULONG Unknown1, ULONG Unknown2) USBD_CompleteRequest(ULONG Unknown1, ULONG Unknown2)
{ {
UNIMPLEMENTED
} }
/* /*
@ -241,6 +253,7 @@ USBD_RegisterHcFilter(
PDEVICE_OBJECT FilterDeviceObject PDEVICE_OBJECT FilterDeviceObject
) )
{ {
UNIMPLEMENTED
} }
/* /*
@ -249,6 +262,7 @@ USBD_RegisterHcFilter(
VOID NTAPI VOID NTAPI
USBD_SetSuspendPowerState(ULONG Unknown1, ULONG Unknown2) USBD_SetSuspendPowerState(ULONG Unknown1, ULONG Unknown2)
{ {
UNIMPLEMENTED
} }
/* /*
@ -257,6 +271,7 @@ USBD_SetSuspendPowerState(ULONG Unknown1, ULONG Unknown2)
NTSTATUS NTAPI NTSTATUS NTAPI
USBD_MakePdoName(ULONG Unknown1, ULONG Unknown2) USBD_MakePdoName(ULONG Unknown1, ULONG Unknown2)
{ {
UNIMPLEMENTED
return STATUS_NOT_SUPPORTED; return STATUS_NOT_SUPPORTED;
} }
@ -269,6 +284,7 @@ USBD_QueryBusTime(
PULONG CurrentFrame PULONG CurrentFrame
) )
{ {
UNIMPLEMENTED
return STATUS_NOT_SUPPORTED; return STATUS_NOT_SUPPORTED;
} }
@ -283,7 +299,7 @@ USBD_GetUSBDIVersion(
if (Version != NULL) if (Version != NULL)
{ {
Version->USBDI_Version = USBDI_VERSION; Version->USBDI_Version = USBDI_VERSION;
Version->Supported_USB_Version = 0x100; Version->Supported_USB_Version = 0x200;
} }
} }
@ -293,6 +309,7 @@ USBD_GetUSBDIVersion(
NTSTATUS NTAPI NTSTATUS NTAPI
USBD_RestoreDevice(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3) USBD_RestoreDevice(ULONG Unknown1, ULONG Unknown2, ULONG Unknown3)
{ {
UNIMPLEMENTED
return STATUS_NOT_SUPPORTED; return STATUS_NOT_SUPPORTED;
} }
@ -303,6 +320,7 @@ VOID NTAPI
USBD_RegisterHcDeviceCapabilities(ULONG Unknown1, ULONG Unknown2, USBD_RegisterHcDeviceCapabilities(ULONG Unknown1, ULONG Unknown2,
ULONG Unknown3) ULONG Unknown3)
{ {
UNIMPLEMENTED
} }
/* /*
@ -586,28 +604,58 @@ USBD_GetPdoRegistryParameter(
NTSTATUS Status; NTSTATUS Status;
HANDLE DevInstRegKey; HANDLE DevInstRegKey;
/* Open the device key */
Status = IoOpenDeviceRegistryKey(PhysicalDeviceObject, Status = IoOpenDeviceRegistryKey(PhysicalDeviceObject,
PLUGPLAY_REGKEY_DRIVER, STANDARD_RIGHTS_ALL, &DevInstRegKey); PLUGPLAY_REGKEY_DEVICE, STANDARD_RIGHTS_ALL, &DevInstRegKey);
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
{ {
PKEY_VALUE_FULL_INFORMATION FullInfo; PKEY_VALUE_PARTIAL_INFORMATION PartialInfo;
UNICODE_STRING ValueName; UNICODE_STRING ValueName;
ULONG Length; ULONG Length;
RtlInitUnicodeString(&ValueName, KeyName); /* Initialize the unicode string based on caller data */
Length = ParameterLength + KeyNameLength + sizeof(KEY_VALUE_FULL_INFORMATION); ValueName.Buffer = KeyName;
FullInfo = ExAllocatePool(PagedPool, Length); ValueName.Length = ValueName.MaximumLength = KeyNameLength;
if (FullInfo)
Length = ParameterLength + sizeof(KEY_VALUE_PARTIAL_INFORMATION);
PartialInfo = ExAllocatePool(PagedPool, Length);
if (PartialInfo)
{ {
Status = ZwQueryValueKey(DevInstRegKey, &ValueName, Status = ZwQueryValueKey(DevInstRegKey, &ValueName,
KeyValueFullInformation, FullInfo, Length, &Length); KeyValuePartialInformation, PartialInfo, Length, &Length);
if (Status == STATUS_BUFFER_OVERFLOW || Status == STATUS_BUFFER_TOO_SMALL)
{
/* The caller doesn't want all the data */
ExFreePool(PartialInfo);
PartialInfo = ExAllocatePool(PagedPool, Length);
if (PartialInfo)
{
Status = ZwQueryValueKey(DevInstRegKey, &ValueName,
KeyValuePartialInformation, PartialInfo, Length, &Length);
}
else
{
Status = STATUS_NO_MEMORY;
}
}
if (NT_SUCCESS(Status)) if (NT_SUCCESS(Status))
{ {
/* Compute the length to copy back */
if (ParameterLength < PartialInfo->DataLength)
Length = ParameterLength;
else
Length = PartialInfo->DataLength;
RtlCopyMemory(Parameter, RtlCopyMemory(Parameter,
((PUCHAR)FullInfo) + FullInfo->DataOffset, PartialInfo->Data,
ParameterLength /*FullInfo->DataLength*/); Length);
}
if (PartialInfo)
{
ExFreePool(PartialInfo);
} }
ExFreePool(FullInfo);
} else } else
Status = STATUS_NO_MEMORY; Status = STATUS_NO_MEMORY;
ZwClose(DevInstRegKey); ZwClose(DevInstRegKey);

View file

@ -1,5 +1,6 @@
@ stdcall USBD_Debug_GetHeap(long long long long) @ stdcall USBD_Debug_GetHeap(long long long long)
@ stdcall USBD_Debug_RetHeap(ptr long long) @ stdcall USBD_Debug_RetHeap(ptr long long)
@ stdcall USBD_Debug_LogEntry(ptr ptr ptr ptr)
@ stdcall USBD_CalculateUsbBandwidth(long long long) @ stdcall USBD_CalculateUsbBandwidth(long long long)
@ stdcall USBD_CreateConfigurationRequestEx(ptr ptr) @ stdcall USBD_CreateConfigurationRequestEx(ptr ptr)
@ stdcall USBD_CreateConfigurationRequest(ptr ptr) @ stdcall USBD_CreateConfigurationRequest(ptr ptr)
@ -7,4 +8,6 @@
@ stdcall USBD_ParseConfigurationDescriptor(ptr long long) @ stdcall USBD_ParseConfigurationDescriptor(ptr long long)
@ stdcall USBD_ParseConfigurationDescriptorEx(ptr ptr long long long long long) @ stdcall USBD_ParseConfigurationDescriptorEx(ptr ptr long long long long long)
@ stdcall USBD_ParseDescriptors(ptr long ptr long) @ stdcall USBD_ParseDescriptors(ptr long ptr long)
;USBD_GetPdoRegistryParameters @ stdcall USBD_GetPdoRegistryParameter(ptr ptr long ptr long)
@ stdcall USBD_GetUSBDIVersion(ptr)
@ stdcall USBD_QueryBusTime(ptr ptr)