[USBEHCI]

- Fix stack corruption found by msvc
- Fix msvc build

svn path=/trunk/; revision=55917
This commit is contained in:
Johannes Anderwald 2012-02-29 10:59:48 +00:00
parent ad333c1655
commit a755140405

View file

@ -45,14 +45,14 @@ public:
UCHAR InternalGetPidDirection(); UCHAR InternalGetPidDirection();
NTSTATUS BuildControlTransferQueueHead(PQUEUE_HEAD * OutHead); NTSTATUS BuildControlTransferQueueHead(PQUEUE_HEAD * OutHead);
NTSTATUS BuildBulkTransferQueueHead(PQUEUE_HEAD * OutHead); NTSTATUS BuildBulkTransferQueueHead(PQUEUE_HEAD * OutHead);
NTSTATUS CreateDescriptor(PQUEUE_TRANSFER_DESCRIPTOR *OutDescriptor); NTSTATUS STDMETHODCALLTYPE CreateDescriptor(PQUEUE_TRANSFER_DESCRIPTOR *OutDescriptor);
NTSTATUS CreateQueueHead(PQUEUE_HEAD *OutQueueHead); NTSTATUS CreateQueueHead(PQUEUE_HEAD *OutQueueHead);
UCHAR GetDeviceAddress(); UCHAR STDMETHODCALLTYPE GetDeviceAddress();
NTSTATUS BuildSetupPacket(); NTSTATUS BuildSetupPacket();
NTSTATUS BuildSetupPacketFromURB(); NTSTATUS BuildSetupPacketFromURB();
ULONG InternalCalculateTransferLength(); ULONG InternalCalculateTransferLength();
NTSTATUS BuildTransferDescriptorChain(IN PQUEUE_HEAD QueueHead, IN PVOID TransferBuffer, IN ULONG TransferBufferLength, IN UCHAR PidCode, IN UCHAR InitialDataToggle, IN PQUEUE_TRANSFER_DESCRIPTOR AlternativeDescriptor, OUT PQUEUE_TRANSFER_DESCRIPTOR * OutFirstDescriptor, OUT PQUEUE_TRANSFER_DESCRIPTOR * OutLastDescriptor, OUT PUCHAR OutDataToggle, OUT PULONG OutTransferBufferOffset); NTSTATUS STDMETHODCALLTYPE BuildTransferDescriptorChain(IN PQUEUE_HEAD QueueHead, IN PVOID TransferBuffer, IN ULONG TransferBufferLength, IN UCHAR PidCode, IN UCHAR InitialDataToggle, OUT PQUEUE_TRANSFER_DESCRIPTOR * OutFirstDescriptor, OUT PQUEUE_TRANSFER_DESCRIPTOR * OutLastDescriptor, OUT PUCHAR OutDataToggle, OUT PULONG OutTransferBufferOffset);
VOID InitDescriptor(IN PQUEUE_TRANSFER_DESCRIPTOR CurrentDescriptor, IN PVOID TransferBuffer, IN ULONG TransferBufferLength, IN UCHAR PidCode, IN UCHAR DataToggle, OUT PULONG OutDescriptorLength); VOID STDMETHODCALLTYPE InitDescriptor(IN PQUEUE_TRANSFER_DESCRIPTOR CurrentDescriptor, IN PVOID TransferBuffer, IN ULONG TransferBufferLength, IN UCHAR PidCode, IN UCHAR DataToggle, OUT PULONG OutDescriptorLength);
VOID DumpQueueHead(IN PQUEUE_HEAD QueueHead); VOID DumpQueueHead(IN PQUEUE_HEAD QueueHead);
// constructor / destructor // constructor / destructor
@ -565,6 +565,7 @@ CUSBRequest::InternalGetPidDirection()
} }
VOID VOID
STDMETHODCALLTYPE
CUSBRequest::InitDescriptor( CUSBRequest::InitDescriptor(
IN PQUEUE_TRANSFER_DESCRIPTOR CurrentDescriptor, IN PQUEUE_TRANSFER_DESCRIPTOR CurrentDescriptor,
IN PVOID TransferBuffer, IN PVOID TransferBuffer,
@ -673,13 +674,13 @@ CUSBRequest::InitDescriptor(
} }
NTSTATUS NTSTATUS
STDMETHODCALLTYPE
CUSBRequest::BuildTransferDescriptorChain( CUSBRequest::BuildTransferDescriptorChain(
IN PQUEUE_HEAD QueueHead, IN PQUEUE_HEAD QueueHead,
IN PVOID TransferBuffer, IN PVOID TransferBuffer,
IN ULONG TransferBufferLength, IN ULONG TransferBufferLength,
IN UCHAR PidCode, IN UCHAR PidCode,
IN UCHAR InitialDataToggle, IN UCHAR InitialDataToggle,
IN PQUEUE_TRANSFER_DESCRIPTOR AlternativeDescriptor,
OUT PQUEUE_TRANSFER_DESCRIPTOR * OutFirstDescriptor, OUT PQUEUE_TRANSFER_DESCRIPTOR * OutFirstDescriptor,
OUT PQUEUE_TRANSFER_DESCRIPTOR * OutLastDescriptor, OUT PQUEUE_TRANSFER_DESCRIPTOR * OutLastDescriptor,
OUT PUCHAR OutDataToggle, OUT PUCHAR OutDataToggle,
@ -757,15 +758,6 @@ CUSBRequest::BuildTransferDescriptorChain(
// //
LastDescriptor->NextPointer = CurrentDescriptor->PhysicalAddr; LastDescriptor->NextPointer = CurrentDescriptor->PhysicalAddr;
LastDescriptor = CurrentDescriptor; LastDescriptor = CurrentDescriptor;
if (AlternativeDescriptor)
{
//
// link to alternative next pointer
//
LastDescriptor->AlternateNextPointer = AlternativeDescriptor->PhysicalAddr;
}
} }
else else
{ {
@ -929,7 +921,6 @@ CUSBRequest::BuildControlTransferQueueHead(
m_TransferBufferLength, m_TransferBufferLength,
InternalGetPidDirection(), InternalGetPidDirection(),
TRUE, TRUE,
NULL,
&FirstDescriptor, &FirstDescriptor,
&LastDescriptor, &LastDescriptor,
NULL, NULL,
@ -939,7 +930,12 @@ CUSBRequest::BuildControlTransferQueueHead(
// FIXME handle errors // FIXME handle errors
// //
ASSERT(Status == STATUS_SUCCESS); ASSERT(Status == STATUS_SUCCESS);
ASSERT(DescriptorChainLength == m_TransferBufferLength); if (m_TransferBufferLength != DescriptorChainLength)
{
DPRINT1("DescriptorChainLength %x\n", DescriptorChainLength);
DPRINT1("m_TransferBufferLength %x\n", m_TransferBufferLength);
ASSERT(FALSE);
}
// //
// now link the descriptors // now link the descriptors
@ -1125,7 +1121,6 @@ CUSBRequest::BuildBulkTransferQueueHead(
MaxTransferLength, MaxTransferLength,
InternalGetPidDirection(), InternalGetPidDirection(),
m_EndpointDescriptor->DataToggle, m_EndpointDescriptor->DataToggle,
NULL,
&FirstDescriptor, &FirstDescriptor,
&LastDescriptor, &LastDescriptor,
&m_EndpointDescriptor->DataToggle, &m_EndpointDescriptor->DataToggle,
@ -1176,6 +1171,7 @@ CUSBRequest::BuildBulkTransferQueueHead(
//---------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------
NTSTATUS NTSTATUS
STDMETHODCALLTYPE
CUSBRequest::CreateDescriptor( CUSBRequest::CreateDescriptor(
PQUEUE_TRANSFER_DESCRIPTOR *OutDescriptor) PQUEUE_TRANSFER_DESCRIPTOR *OutDescriptor)
{ {
@ -1430,7 +1426,7 @@ CUSBRequest::BuildSetupPacketFromURB()
m_DescriptorPacket->wValue.LowByte = Urb->UrbControlDescriptorRequest.Index; m_DescriptorPacket->wValue.LowByte = Urb->UrbControlDescriptorRequest.Index;
m_DescriptorPacket->wValue.HiByte = Urb->UrbControlDescriptorRequest.DescriptorType; m_DescriptorPacket->wValue.HiByte = Urb->UrbControlDescriptorRequest.DescriptorType;
m_DescriptorPacket->wIndex.W = Urb->UrbControlDescriptorRequest.LanguageId; m_DescriptorPacket->wIndex.W = Urb->UrbControlDescriptorRequest.LanguageId;
m_DescriptorPacket->wLength = Urb->UrbControlDescriptorRequest.TransferBufferLength; m_DescriptorPacket->wLength = (USHORT)Urb->UrbControlDescriptorRequest.TransferBufferLength;
m_DescriptorPacket->bmRequestType.B = 0x80; m_DescriptorPacket->bmRequestType.B = 0x80;
break; break;