diff --git a/reactos/drivers/storage/cdrom/cdrom.c b/reactos/drivers/storage/cdrom/cdrom.c index ee06128ff45..28b8ab50547 100644 --- a/reactos/drivers/storage/cdrom/cdrom.c +++ b/reactos/drivers/storage/cdrom/cdrom.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: cdrom.c,v 1.10 2002/05/26 20:23:22 ekohl Exp $ +/* $Id: cdrom.c,v 1.11 2002/06/06 23:19:19 ekohl Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -202,7 +202,9 @@ CdromClassFindDevices(IN PDRIVER_OBJECT DriverObject, return(FALSE); } + DPRINT("PortCapabilities: %p\n", PortCapabilities); DPRINT("MaximumTransferLength: %lu\n", PortCapabilities->MaximumTransferLength); + DPRINT("MaximumPhysicalPages: %lu\n", PortCapabilities->MaximumPhysicalPages); /* Get inquiry data */ Status = ScsiClassGetInquiryData(PortDeviceObject, @@ -270,7 +272,6 @@ CdromClassFindDevices(IN PDRIVER_OBJECT DriverObject, } ExFreePool(Buffer); - ExFreePool(PortCapabilities); DPRINT("CdromClassFindDevices() done\n"); @@ -433,10 +434,7 @@ CdromClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, DiskDeviceExtension->DeviceNumber = DeviceNumber; DiskDeviceExtension->PortDeviceObject = PortDeviceObject; DiskDeviceExtension->PhysicalDevice = DiskDeviceObject; - - /* FIXME: Not yet! Will cause pointer corruption! */ -// DiskDeviceExtension->PortCapabilities = PortCapabilities; - + DiskDeviceExtension->PortCapabilities = Capabilities; DiskDeviceExtension->StartingOffset.QuadPart = 0; DiskDeviceExtension->PortNumber = (UCHAR)PortNumber; DiskDeviceExtension->PathId = InquiryData->PathId; @@ -578,7 +576,7 @@ CdromClassDeviceControl(IN PDEVICE_OBJECT DeviceObject, Status = ScsiClassReadDriveCapacity(DeviceObject); if (NT_SUCCESS(Status)) { - Geometry = (PDISK_GEOMETRY) Irp->AssociatedIrp.SystemBuffer; + Geometry = (PDISK_GEOMETRY)Irp->AssociatedIrp.SystemBuffer; RtlMoveMemory(Geometry, DeviceExtension->DiskGeometry, sizeof(DISK_GEOMETRY)); diff --git a/reactos/drivers/storage/class2/class2.c b/reactos/drivers/storage/class2/class2.c index 8dd8e33ea18..ad38cadeee0 100644 --- a/reactos/drivers/storage/class2/class2.c +++ b/reactos/drivers/storage/class2/class2.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: class2.c,v 1.20 2002/06/05 19:31:39 hbirr Exp $ +/* $Id: class2.c,v 1.21 2002/06/06 23:19:36 ekohl Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -536,20 +536,11 @@ NTSTATUS STDCALL ScsiClassGetCapabilities(PDEVICE_OBJECT PortDeviceObject, PIO_SCSI_CAPABILITIES *PortCapabilities) { - PIO_SCSI_CAPABILITIES Buffer; IO_STATUS_BLOCK IoStatusBlock; NTSTATUS Status; KEVENT Event; PIRP Irp; - *PortCapabilities = NULL; - Buffer = ExAllocatePool(NonPagedPool, - sizeof(IO_SCSI_CAPABILITIES)); - if (Buffer == NULL) - { - return(STATUS_INSUFFICIENT_RESOURCES); - } - KeInitializeEvent(&Event, NotificationEvent, FALSE); @@ -558,14 +549,13 @@ ScsiClassGetCapabilities(PDEVICE_OBJECT PortDeviceObject, PortDeviceObject, NULL, 0, - Buffer, - sizeof(IO_SCSI_CAPABILITIES), + PortCapabilities, + sizeof(PVOID), FALSE, &Event, &IoStatusBlock); if (Irp == NULL) { - ExFreePool(Buffer); return(STATUS_INSUFFICIENT_RESOURCES); } @@ -581,14 +571,7 @@ ScsiClassGetCapabilities(PDEVICE_OBJECT PortDeviceObject, Status = IoStatusBlock.Status; } - if (!NT_SUCCESS(Status)) - { - ExFreePool(Buffer); - } - else - { - *PortCapabilities = Buffer; - } + DPRINT("PortCapabilities at %p\n", *PortCapabilities); return(Status); } @@ -1486,10 +1469,8 @@ ScsiClassReadWrite(IN PDEVICE_OBJECT DeviceObject, IrpStack->Parameters.Read.ByteOffset.QuadPart, IrpStack->Parameters.Read.Length); -// MaximumTransferLength = DeviceExtension->PortCapabilities->MaximumTransferLength; -// MaximumTransferPages = DeviceExtension->PortCapabilities->MaximumPhysicalPages; - MaximumTransferLength = 0x10000; /* 64 kbytes */ - MaximumTransferPages = MaximumTransferLength / PAGESIZE; + MaximumTransferLength = DeviceExtension->PortCapabilities->MaximumTransferLength; + MaximumTransferPages = DeviceExtension->PortCapabilities->MaximumPhysicalPages; CurrentTransferLength = IrpStack->Parameters.Read.Length; @@ -1560,9 +1541,7 @@ ScsiClassReadWrite(IN PDEVICE_OBJECT DeviceObject, MaximumTransferLength, CurrentTransferLength); /* Adjust the maximum transfer length */ -// CurrentTransferPages = DeviceExtension->PortCapabilities->MaximumPhysicalPages - 1; - CurrentTransferPages = 0x10000 / PAGESIZE; - + CurrentTransferPages = DeviceExtension->PortCapabilities->MaximumPhysicalPages; if (MaximumTransferLength > CurrentTransferPages * PAGESIZE) MaximumTransferLength = CurrentTransferPages * PAGESIZE; diff --git a/reactos/drivers/storage/disk/disk.c b/reactos/drivers/storage/disk/disk.c index 9bdca5f50e2..7d09e0cd2b4 100644 --- a/reactos/drivers/storage/disk/disk.c +++ b/reactos/drivers/storage/disk/disk.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: disk.c,v 1.14 2002/05/28 09:29:07 ekohl Exp $ +/* $Id: disk.c,v 1.15 2002/06/06 23:19:53 ekohl Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -200,7 +200,9 @@ DiskClassFindDevices(PDRIVER_OBJECT DriverObject, return(FALSE); } + DPRINT("PortCapabilities: %p\n", PortCapabilities); DPRINT("MaximumTransferLength: %lu\n", PortCapabilities->MaximumTransferLength); + DPRINT("MaximumPhysicalPages: %lu\n", PortCapabilities->MaximumPhysicalPages); /* Get inquiry data */ Status = ScsiClassGetInquiryData(PortDeviceObject, @@ -268,7 +270,6 @@ DiskClassFindDevices(PDRIVER_OBJECT DriverObject, } ExFreePool(Buffer); - ExFreePool(PortCapabilities); DPRINT("DiskClassFindDevices() done\n"); @@ -481,10 +482,7 @@ DiskClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, DiskDeviceExtension->DeviceNumber = DiskNumber; DiskDeviceExtension->PortDeviceObject = PortDeviceObject; DiskDeviceExtension->PhysicalDevice = DiskDeviceObject; - - /* FIXME: Not yet! Will cause pointer corruption! */ -// DiskDeviceExtension->PortCapabilities = PortCapabilities; - + DiskDeviceExtension->PortCapabilities = Capabilities; DiskDeviceExtension->StartingOffset.QuadPart = 0; DiskDeviceExtension->PortNumber = (UCHAR)PortNumber; DiskDeviceExtension->PathId = InquiryData->PathId; @@ -631,10 +629,7 @@ DiskClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, PartitionDeviceExtension->PortDeviceObject = PortDeviceObject; PartitionDeviceExtension->DiskGeometry = DiskDeviceExtension->DiskGeometry; PartitionDeviceExtension->PhysicalDevice = DiskDeviceExtension->PhysicalDevice; - - /* FIXME: Not yet! Will cause pointer corruption! */ -// PartitionDeviceExtension->PortCapabilities = PortCapabilities; - + PartitionDeviceExtension->PortCapabilities = Capabilities; PartitionDeviceExtension->StartingOffset.QuadPart = PartitionEntry->StartingOffset.QuadPart; PartitionDeviceExtension->PartitionLength.QuadPart = @@ -659,8 +654,6 @@ DiskClassCreateDeviceObject(IN PDRIVER_OBJECT DriverObject, break; } } - - } if (PartitionList != NULL) diff --git a/reactos/drivers/storage/scsiport/scsiport.c b/reactos/drivers/storage/scsiport/scsiport.c index 244c4955d74..9cdadc023bb 100644 --- a/reactos/drivers/storage/scsiport/scsiport.c +++ b/reactos/drivers/storage/scsiport/scsiport.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: scsiport.c,v 1.15 2002/05/26 20:25:49 ekohl Exp $ +/* $Id: scsiport.c,v 1.16 2002/06/06 23:20:08 ekohl Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -78,6 +78,8 @@ typedef struct _SCSI_PORT_DEVICE_EXTENSION ULONG PortBusInfoSize; PSCSI_ADAPTER_BUS_INFO PortBusInfo; + PIO_SCSI_CAPABILITIES PortCapabilities; + PDEVICE_OBJECT DeviceObject; PCONTROLLER_OBJECT ControllerObject; @@ -896,25 +898,12 @@ ScsiPortDeviceControl(IN PDEVICE_OBJECT DeviceObject, case IOCTL_SCSI_GET_CAPABILITIES: { - PIO_SCSI_CAPABILITIES Capabilities; - DPRINT(" IOCTL_SCSI_GET_CAPABILITIES\n"); - Capabilities = (PIO_SCSI_CAPABILITIES)Irp->AssociatedIrp.SystemBuffer; - Capabilities->Length = sizeof(IO_SCSI_CAPABILITIES); - Capabilities->MaximumTransferLength = - DeviceExtension->PortConfig.MaximumTransferLength; - Capabilities->MaximumPhysicalPages = 1; - Capabilities->SupportedAsynchronousEvents = 0; - Capabilities->AlignmentMask = - DeviceExtension->PortConfig.AlignmentMask; - Capabilities->TaggedQueuing = - DeviceExtension->PortConfig.TaggedQueuing; - Capabilities->AdapterScansDown = - DeviceExtension->PortConfig.AdapterScansDown; - Capabilities->AdapterUsesPio = TRUE; + *((PIO_SCSI_CAPABILITIES *)Irp->AssociatedIrp.SystemBuffer) = + DeviceExtension->PortCapabilities; - Irp->IoStatus.Information = sizeof(IO_SCSI_CAPABILITIES); + Irp->IoStatus.Information = sizeof(PIO_SCSI_CAPABILITIES); } break; @@ -1068,6 +1057,7 @@ ScsiPortCreatePortDevice(IN PDRIVER_OBJECT DriverObject, IN ULONG PortNumber) { PSCSI_PORT_DEVICE_EXTENSION PortDeviceExtension; + PIO_SCSI_CAPABILITIES PortCapabilities; PDEVICE_OBJECT PortDeviceObject; WCHAR NameBuffer[80]; UNICODE_STRING DeviceName; @@ -1174,6 +1164,24 @@ ScsiPortCreatePortDevice(IN PDRIVER_OBJECT DriverObject, ScsiPortIoTimer, PortDeviceExtension); + /* Initialize port capabilities */ + PortCapabilities = ExAllocatePool(NonPagedPool, + sizeof(IO_SCSI_CAPABILITIES)); + PortDeviceExtension->PortCapabilities = PortCapabilities; + PortCapabilities->Length = sizeof(IO_SCSI_CAPABILITIES); + PortCapabilities->MaximumTransferLength = + PortDeviceExtension->PortConfig.MaximumTransferLength; + PortCapabilities->MaximumPhysicalPages = + PortCapabilities->MaximumTransferLength / PAGESIZE; + PortCapabilities->SupportedAsynchronousEvents = 0; /* FIXME */ + PortCapabilities->AlignmentMask = + PortDeviceExtension->PortConfig.AlignmentMask; + PortCapabilities->TaggedQueuing = + PortDeviceExtension->PortConfig.TaggedQueuing; + PortCapabilities->AdapterScansDown = + PortDeviceExtension->PortConfig.AdapterScansDown; + PortCapabilities->AdapterUsesPio = TRUE; /* FIXME */ + /* Initialize inquiry data */ PortDeviceExtension->PortBusInfoSize = 0; PortDeviceExtension->PortBusInfo = NULL;