Author: cgutman
Date: Fri Oct 15 19:25:07 2010
New Revision: 49158
URL:
http://svn.reactos.org/svn/reactos?rev=49158&view=rev
Log:
[SCSIPORT]
- Remove some code duplication and fix a bug of copying the same interrupt information
twice for a device with 2 interrupts (instead of the info for interrupt 1 then the info
for interrupt 2) effectively making initialization fail because the resource allocation
code will detect a conflict with itself
Modified:
trunk/reactos/drivers/storage/scsiport/scsiport.c
Modified: trunk/reactos/drivers/storage/scsiport/scsiport.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/storage/scsiport/s…
==============================================================================
--- trunk/reactos/drivers/storage/scsiport/scsiport.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/storage/scsiport/scsiport.c [iso-8859-1] Fri Oct 15 19:25:07
2010
@@ -2216,7 +2216,7 @@
}
/* If we use interrupt(s), copy them */
- if (Interrupt)
+ while (Interrupt)
{
ResourceDescriptor->Type = CmResourceTypeInterrupt;
@@ -2232,37 +2232,12 @@
ResourceDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED;
}
- ResourceDescriptor->u.Interrupt.Level = PortConfig->BusInterruptLevel;
- ResourceDescriptor->u.Interrupt.Vector = PortConfig->BusInterruptVector;
+ ResourceDescriptor->u.Interrupt.Level = (Interrupt == 2) ?
PortConfig->BusInterruptLevel2 : PortConfig->BusInterruptLevel;
+ ResourceDescriptor->u.Interrupt.Vector = (Interrupt == 2) ?
PortConfig->BusInterruptVector2 : PortConfig->BusInterruptVector;
ResourceDescriptor->u.Interrupt.Affinity = 0;
ResourceDescriptor++;
Interrupt--;
- }
-
- /* Copy 2nd interrupt
- FIXME: Stupid code duplication, remove */
- if (Interrupt)
- {
- ResourceDescriptor->Type = CmResourceTypeInterrupt;
-
- if (PortConfig->AdapterInterfaceType == MicroChannel ||
- PortConfig->InterruptMode == LevelSensitive)
- {
- ResourceDescriptor->ShareDisposition = CmResourceShareShared;
- ResourceDescriptor->Flags = CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE;
- }
- else
- {
- ResourceDescriptor->ShareDisposition = CmResourceShareDeviceExclusive;
- ResourceDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED;
- }
-
- ResourceDescriptor->u.Interrupt.Level = PortConfig->BusInterruptLevel;
- ResourceDescriptor->u.Interrupt.Vector = PortConfig->BusInterruptVector;
- ResourceDescriptor->u.Interrupt.Affinity = 0;
-
- ResourceDescriptor++;
}
/* Copy DMA data */