mirror of
https://github.com/reactos/reactos.git
synced 2024-07-29 07:39:10 +00:00
[USBSTOR]
- Start implementing write command - Disabled for now as it causes corruptions svn path=/branches/usb-bringup/; revision=51695
This commit is contained in:
parent
89aa9d3264
commit
3f8c058a07
|
@ -50,14 +50,14 @@ USBSTOR_HandleExecuteSCSI(
|
||||||
//
|
//
|
||||||
Status = USBSTOR_SendModeSenseCmd(DeviceObject, Irp);
|
Status = USBSTOR_SendModeSenseCmd(DeviceObject, Irp);
|
||||||
}
|
}
|
||||||
else if (pCDB->MODE_SENSE.OperationCode == SCSIOP_READ)
|
else if (pCDB->MODE_SENSE.OperationCode == SCSIOP_READ /*|| pCDB->MODE_SENSE.OperationCode == SCSIOP_WRITE*/)
|
||||||
{
|
{
|
||||||
DPRINT1("SCSIOP_READ DataTransferLength %lu\n", Request->DataTransferLength);
|
DPRINT1("SCSIOP_READ / SCSIOP_WRITE DataTransferLength %lu\n", Request->DataTransferLength);
|
||||||
|
|
||||||
//
|
//
|
||||||
// send read command
|
// send read / write command
|
||||||
//
|
//
|
||||||
Status = USBSTOR_SendReadCmd(DeviceObject, Irp);
|
Status = USBSTOR_SendReadWriteCmd(DeviceObject, Irp);
|
||||||
}
|
}
|
||||||
else if (pCDB->AsByte[0] == SCSIOP_MEDIUM_REMOVAL)
|
else if (pCDB->AsByte[0] == SCSIOP_MEDIUM_REMOVAL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -332,6 +332,8 @@ USBSTOR_CBWCompletionRoutine(
|
||||||
{
|
{
|
||||||
PIRP_CONTEXT Context;
|
PIRP_CONTEXT Context;
|
||||||
PIO_STACK_LOCATION IoStack;
|
PIO_STACK_LOCATION IoStack;
|
||||||
|
UCHAR Code;
|
||||||
|
USBD_PIPE_HANDLE PipeHandle;
|
||||||
|
|
||||||
DPRINT1("USBSTOR_CBWCompletionRoutine Irp %p Ctx %p\n", Irp, Ctx);
|
DPRINT1("USBSTOR_CBWCompletionRoutine Irp %p Ctx %p\n", Irp, Ctx);
|
||||||
|
|
||||||
|
@ -350,13 +352,32 @@ USBSTOR_CBWCompletionRoutine(
|
||||||
//
|
//
|
||||||
if (Context->TransferDataLength)
|
if (Context->TransferDataLength)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
// get command code
|
||||||
|
//
|
||||||
|
Code = Context->cbw->CommandBlock[0];
|
||||||
|
|
||||||
|
if (Code == SCSIOP_WRITE)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// write request use bulk out pipe
|
||||||
|
//
|
||||||
|
PipeHandle = Context->FDODeviceExtension->InterfaceInformation->Pipes[Context->FDODeviceExtension->BulkOutPipeIndex].PipeHandle;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// default bulk in pipe
|
||||||
|
//
|
||||||
|
PipeHandle = Context->FDODeviceExtension->InterfaceInformation->Pipes[Context->FDODeviceExtension->BulkInPipeIndex].PipeHandle;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// now initialize the urb for sending data
|
// now initialize the urb for sending data
|
||||||
//
|
//
|
||||||
|
|
||||||
UsbBuildInterruptOrBulkTransferRequest(&Context->Urb,
|
UsbBuildInterruptOrBulkTransferRequest(&Context->Urb,
|
||||||
sizeof(struct _URB_BULK_OR_INTERRUPT_TRANSFER),
|
sizeof(struct _URB_BULK_OR_INTERRUPT_TRANSFER),
|
||||||
Context->FDODeviceExtension->InterfaceInformation->Pipes[Context->FDODeviceExtension->BulkInPipeIndex].PipeHandle,
|
PipeHandle,
|
||||||
NULL,
|
NULL,
|
||||||
Context->TransferBufferMDL,
|
Context->TransferBufferMDL,
|
||||||
Context->TransferDataLength,
|
Context->TransferDataLength,
|
||||||
|
@ -871,11 +892,11 @@ USBSTOR_SendModeSenseCmd(
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
USBSTOR_SendReadCmd(
|
USBSTOR_SendReadWriteCmd(
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
IN PIRP Irp)
|
IN PIRP Irp)
|
||||||
{
|
{
|
||||||
UFI_READ_CMD Cmd;
|
UFI_READ_WRITE_CMD Cmd;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PPDO_DEVICE_EXTENSION PDODeviceExtension;
|
PPDO_DEVICE_EXTENSION PDODeviceExtension;
|
||||||
PCDB pCDB;
|
PCDB pCDB;
|
||||||
|
@ -907,7 +928,12 @@ USBSTOR_SendReadCmd(
|
||||||
//
|
//
|
||||||
// informal debug print
|
// informal debug print
|
||||||
//
|
//
|
||||||
DPRINT1("USBSTOR_SendReadCmd DataTransferLength %x, BlockLength %x\n", Request->DataTransferLength, PDODeviceExtension->BlockLength);
|
DPRINT1("USBSTOR_SendReadWriteCmd DataTransferLength %x, BlockLength %x\n", Request->DataTransferLength, PDODeviceExtension->BlockLength);
|
||||||
|
|
||||||
|
//
|
||||||
|
// sanity check
|
||||||
|
//
|
||||||
|
ASSERT(PDODeviceExtension->BlockLength);
|
||||||
|
|
||||||
//
|
//
|
||||||
// block count
|
// block count
|
||||||
|
@ -917,8 +943,8 @@ USBSTOR_SendReadCmd(
|
||||||
//
|
//
|
||||||
// initialize read cmd
|
// initialize read cmd
|
||||||
//
|
//
|
||||||
RtlZeroMemory(&Cmd, sizeof(UFI_READ_CMD));
|
RtlZeroMemory(&Cmd, sizeof(UFI_READ_WRITE_CMD));
|
||||||
Cmd.Code = SCSIOP_READ;
|
Cmd.Code = pCDB->AsByte[0];
|
||||||
Cmd.LUN = (PDODeviceExtension->LUN & MAX_LUN);
|
Cmd.LUN = (PDODeviceExtension->LUN & MAX_LUN);
|
||||||
Cmd.ContiguousLogicBlocks = _byteswap_ushort(BlockCount);
|
Cmd.ContiguousLogicBlocks = _byteswap_ushort(BlockCount);
|
||||||
Cmd.LogicalBlockByte0 = pCDB->CDB10.LogicalBlockByte0;
|
Cmd.LogicalBlockByte0 = pCDB->CDB10.LogicalBlockByte0;
|
||||||
|
@ -931,7 +957,7 @@ USBSTOR_SendReadCmd(
|
||||||
//
|
//
|
||||||
// send request
|
// send request
|
||||||
//
|
//
|
||||||
return USBSTOR_SendRequest(DeviceObject, Irp, NULL, UFI_READ_CMD_LEN, (PUCHAR)&Cmd, Request->DataTransferLength, (PUCHAR)Request->DataBuffer);
|
return USBSTOR_SendRequest(DeviceObject, Irp, NULL, UFI_READ_WRITE_CMD_LEN, (PUCHAR)&Cmd, Request->DataTransferLength, (PUCHAR)Request->DataBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
|
|
@ -158,11 +158,11 @@ typedef struct
|
||||||
UCHAR Reserved; // reserved 0x00
|
UCHAR Reserved; // reserved 0x00
|
||||||
USHORT ContiguousLogicBlocks; // num of contiguous logical blocks
|
USHORT ContiguousLogicBlocks; // num of contiguous logical blocks
|
||||||
UCHAR Reserved1[3]; // reserved 0x00
|
UCHAR Reserved1[3]; // reserved 0x00
|
||||||
}UFI_READ_CMD;
|
}UFI_READ_WRITE_CMD;
|
||||||
|
|
||||||
C_ASSERT(sizeof(UFI_READ_CMD) == 12);
|
C_ASSERT(sizeof(UFI_READ_WRITE_CMD) == 12);
|
||||||
|
|
||||||
#define UFI_READ_CMD_LEN (0xA)
|
#define UFI_READ_WRITE_CMD_LEN (0xA)
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
|
@ -375,7 +375,7 @@ USBSTOR_SendModeSenseCmd(
|
||||||
IN PIRP Irp);
|
IN PIRP Irp);
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
USBSTOR_SendReadCmd(
|
USBSTOR_SendReadWriteCmd(
|
||||||
IN PDEVICE_OBJECT DeviceObject,
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
IN PIRP Irp);
|
IN PIRP Irp);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue