mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 09:03:25 +00:00
- Reduced the necessary size of inquiry data to 4 byte.
- Incremented the active irp counters in SpiAddActiveIrp, because the valid value is necessary in this function while starting new irp's. - Do not set the command queueing enable flag in SpiAddActiveIrp, because this is the job of a driver above scsiport. svn path=/trunk/; revision=9806
This commit is contained in:
parent
924522f57c
commit
7d5a8e2e07
1 changed files with 20 additions and 14 deletions
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
/* $Id: scsiport.c,v 1.61 2004/06/15 09:29:41 hbirr Exp $
|
/* $Id: scsiport.c,v 1.62 2004/06/21 21:00:37 hbirr Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -48,6 +48,8 @@
|
||||||
|
|
||||||
/* GLOBALS *******************************************************************/
|
/* GLOBALS *******************************************************************/
|
||||||
|
|
||||||
|
static ULONG InternalDebugLevel = 0;
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
SpiProcessRequests(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension,
|
SpiProcessRequests(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension,
|
||||||
PIRP NextIrp);
|
PIRP NextIrp);
|
||||||
|
@ -202,10 +204,8 @@ ScsiDebugPrint(IN ULONG DebugPrintLevel,
|
||||||
char Buffer[256];
|
char Buffer[256];
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
#if 0
|
if (DebugPrintLevel >= InternalDebugLevel)
|
||||||
if (DebugPrintLevel > InternalDebugLevel)
|
|
||||||
return;
|
return;
|
||||||
#endif
|
|
||||||
|
|
||||||
va_start(ap, DebugMessage);
|
va_start(ap, DebugMessage);
|
||||||
vsprintf(Buffer, DebugMessage, ap);
|
vsprintf(Buffer, DebugMessage, ap);
|
||||||
|
@ -1787,8 +1787,6 @@ SpiAllocateSrbExtension(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension,
|
||||||
{
|
{
|
||||||
DeviceExtension->CurrentSrbExtensions++;
|
DeviceExtension->CurrentSrbExtensions++;
|
||||||
Srb->SrbExtension = DeviceExtension->VirtualAddress + index * DeviceExtension->SrbExtensionSize;
|
Srb->SrbExtension = DeviceExtension->VirtualAddress + index * DeviceExtension->SrbExtensionSize;
|
||||||
// Srb->QueueTag = i;
|
|
||||||
// Srb->QueueAction = SRB_SIMPLE_TAG_REQUEST;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DPRINT("%x\n", Srb->SrbExtension);
|
DPRINT("%x\n", Srb->SrbExtension);
|
||||||
|
@ -2042,7 +2040,14 @@ SpiScanAdapter (IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension)
|
||||||
if (NT_SUCCESS(ScanData->Status) &&
|
if (NT_SUCCESS(ScanData->Status) &&
|
||||||
(Srb->SrbStatus == SRB_STATUS_SUCCESS ||
|
(Srb->SrbStatus == SRB_STATUS_SUCCESS ||
|
||||||
(Srb->SrbStatus == SRB_STATUS_DATA_OVERRUN &&
|
(Srb->SrbStatus == SRB_STATUS_DATA_OVERRUN &&
|
||||||
Srb->DataTransferLength >= INQUIRYDATABUFFERSIZE)) &&
|
/*
|
||||||
|
* FIXME:
|
||||||
|
* The NT 4.0 driver from an inic950 based scsi controller
|
||||||
|
* returns only 4 byte of inquiry data, but the device name
|
||||||
|
* is visible on NT 4.0. We must implement an other way
|
||||||
|
* to get the complete inquiry data.
|
||||||
|
*/
|
||||||
|
Srb->DataTransferLength >= /*INQUIRYDATABUFFERSIZE*/4)) &&
|
||||||
((PINQUIRYDATA)Srb->DataBuffer)->DeviceTypeQualifier == 0)
|
((PINQUIRYDATA)Srb->DataBuffer)->DeviceTypeQualifier == 0)
|
||||||
{
|
{
|
||||||
/* Copy inquiry data */
|
/* Copy inquiry data */
|
||||||
|
@ -2777,13 +2782,10 @@ SpiAddActiveIrp(PSCSI_PORT_DEVICE_EXTENSION DeviceExtension,
|
||||||
PSCSI_REQUEST_BLOCK Srb;
|
PSCSI_REQUEST_BLOCK Srb;
|
||||||
LunExtension = Irp->Tail.Overlay.DriverContext[2];
|
LunExtension = Irp->Tail.Overlay.DriverContext[2];
|
||||||
Srb = Irp->Tail.Overlay.DriverContext[3];
|
Srb = Irp->Tail.Overlay.DriverContext[3];
|
||||||
Srb->SrbFlags |= SRB_FLAGS_IS_ACTIVE;
|
|
||||||
Irp->Tail.Overlay.DriverContext[0] = (PVOID)DeviceExtension->NextIrp;
|
Irp->Tail.Overlay.DriverContext[0] = (PVOID)DeviceExtension->NextIrp;
|
||||||
InterlockedExchangePointer(&DeviceExtension->NextIrp, Irp);
|
InterlockedExchangePointer(&DeviceExtension->NextIrp, Irp);
|
||||||
Irp->Tail.Overlay.DriverContext[1] = (PVOID)LunExtension->NextIrp;
|
Irp->Tail.Overlay.DriverContext[1] = (PVOID)LunExtension->NextIrp;
|
||||||
InterlockedExchangePointer(&LunExtension->NextIrp, Irp);
|
InterlockedExchangePointer(&LunExtension->NextIrp, Irp);
|
||||||
InterlockedIncrement((PLONG)&LunExtension->ActiveIrpCount);
|
|
||||||
InterlockedIncrement((PLONG)&DeviceExtension->ActiveIrpCount);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
|
@ -2838,10 +2840,6 @@ SpiProcessRequests(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension,
|
||||||
* FIXME:
|
* FIXME:
|
||||||
* Is this the right place to set this flag ?
|
* Is this the right place to set this flag ?
|
||||||
*/
|
*/
|
||||||
if (DeviceExtension->PortConfig->MultipleRequestPerLu)
|
|
||||||
{
|
|
||||||
Srb->SrbFlags |= SRB_FLAGS_QUEUE_ACTION_ENABLE;
|
|
||||||
}
|
|
||||||
NextIrp->Tail.Overlay.DriverContext[2] = (PVOID)Srb->QueueSortKey;
|
NextIrp->Tail.Overlay.DriverContext[2] = (PVOID)Srb->QueueSortKey;
|
||||||
LunExtension = Srb->OriginalRequest;
|
LunExtension = Srb->OriginalRequest;
|
||||||
|
|
||||||
|
@ -3021,6 +3019,10 @@ SpiProcessRequests(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension,
|
||||||
{
|
{
|
||||||
LunExtension->PendingIrpCount--;
|
LunExtension->PendingIrpCount--;
|
||||||
DeviceExtension->PendingIrpCount--;
|
DeviceExtension->PendingIrpCount--;
|
||||||
|
Srb->SrbFlags |= SRB_FLAGS_IS_ACTIVE;
|
||||||
|
LunExtension->ActiveIrpCount++;
|
||||||
|
DeviceExtension->ActiveIrpCount++;
|
||||||
|
|
||||||
RemoveEntryList((PLIST_ENTRY)&Irp->Tail.Overlay.DriverContext[0]);
|
RemoveEntryList((PLIST_ENTRY)&Irp->Tail.Overlay.DriverContext[0]);
|
||||||
Irp->Tail.Overlay.DriverContext[2] = LunExtension;
|
Irp->Tail.Overlay.DriverContext[2] = LunExtension;
|
||||||
Srb->OriginalRequest = Irp;
|
Srb->OriginalRequest = Irp;
|
||||||
|
@ -3058,6 +3060,10 @@ SpiProcessRequests(IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension,
|
||||||
|
|
||||||
LunExtension->PendingIrpCount--;
|
LunExtension->PendingIrpCount--;
|
||||||
DeviceExtension->PendingIrpCount--;
|
DeviceExtension->PendingIrpCount--;
|
||||||
|
Srb->SrbFlags |= SRB_FLAGS_IS_ACTIVE;
|
||||||
|
LunExtension->ActiveIrpCount++;
|
||||||
|
DeviceExtension->ActiveIrpCount++;
|
||||||
|
|
||||||
SpiAllocateSrbExtension(DeviceExtension, Srb);
|
SpiAllocateSrbExtension(DeviceExtension, Srb);
|
||||||
KeReleaseSpinLockFromDpcLevel(&DeviceExtension->Lock);
|
KeReleaseSpinLockFromDpcLevel(&DeviceExtension->Lock);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue