ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

scsiport_int.h
Go to the documentation of this file.
00001 /*
00002  * SCSI_PORT_TIMER_STATES
00003  *
00004  * DESCRIPTION
00005  *  An enumeration containing the states in the timer DFA
00006  */
00007 
00008 #define VERSION "0.0.3"
00009 
00010 #ifndef PAGE_ROUND_UP
00011 #define PAGE_ROUND_UP(x) ( (((ULONG_PTR)x)%PAGE_SIZE) ? ((((ULONG_PTR)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG_PTR)x) )
00012 #endif
00013 #ifndef ROUND_UP
00014 #define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S))
00015 #endif
00016 
00017 #define TAG_SCSIPORT 'ISCS'
00018 
00019 /* Defines how many logical unit arrays will be in a device extension */
00020 #define LUS_NUMBER 8
00021 
00022 #define MAX_SG_LIST 17
00023 
00024 /* Flags */
00025 #define SCSI_PORT_DEVICE_BUSY         0x0001
00026 #define SCSI_PORT_LU_ACTIVE           0x0002
00027 #define SCSI_PORT_NOTIFICATION_NEEDED 0x0004
00028 #define SCSI_PORT_NEXT_REQUEST_READY  0x0008
00029 #define SCSI_PORT_FLUSH_ADAPTERS      0x0010
00030 #define SCSI_PORT_MAP_TRANSFER        0x0020
00031 #define SCSI_PORT_RESET               0x0080
00032 #define SCSI_PORT_RESET_REQUEST       0x0100
00033 #define SCSI_PORT_RESET_REPORTED      0x0200
00034 #define SCSI_PORT_REQUEST_PENDING     0x0800
00035 #define SCSI_PORT_DISCONNECT_ALLOWED  0x1000
00036 #define SCSI_PORT_DISABLE_INT_REQUESET 0x2000
00037 #define SCSI_PORT_DISABLE_INTERRUPTS  0x4000
00038 #define SCSI_PORT_ENABLE_INT_REQUEST  0x8000
00039 #define SCSI_PORT_TIMER_NEEDED        0x10000
00040 
00041 /* LUN Extension flags*/
00042 #define LUNEX_FROZEN_QUEUE        0x0001
00043 #define LUNEX_NEED_REQUEST_SENSE  0x0004
00044 #define LUNEX_BUSY                0x0008
00045 #define LUNEX_FULL_QUEUE          0x0010
00046 #define LUNEX_REQUEST_PENDING     0x0020
00047 #define SCSI_PORT_SCAN_IN_PROGRESS    0x8000
00048 
00049 
00050 typedef enum _SCSI_PORT_TIMER_STATES
00051 {
00052   IDETimerIdle,
00053   IDETimerCmdWait,
00054   IDETimerResetWaitForBusyNegate,
00055   IDETimerResetWaitForDrdyAssert
00056 } SCSI_PORT_TIMER_STATES;
00057 
00058 typedef struct _CONFIGURATION_INFO
00059 {
00060     /* Identify info */
00061     ULONG AdapterNumber;
00062     ULONG LastAdapterNumber;
00063     ULONG BusNumber;
00064 
00065     /* Registry related */
00066     HANDLE BusKey;
00067     HANDLE ServiceKey;
00068     HANDLE DeviceKey;
00069 
00070     /* Features */
00071     BOOLEAN DisableTaggedQueueing;
00072     BOOLEAN DisableMultipleLun;
00073 
00074     /* Parameters */
00075     PVOID Parameter;
00076     PACCESS_RANGE AccessRanges;
00077 } CONFIGURATION_INFO, *PCONFIGURATION_INFO;
00078 
00079 typedef struct _SCSI_PORT_DEVICE_BASE
00080 {
00081   LIST_ENTRY List;
00082 
00083   PVOID MappedAddress;
00084   ULONG NumberOfBytes;
00085   SCSI_PHYSICAL_ADDRESS IoAddress;
00086   ULONG SystemIoBusNumber;
00087 } SCSI_PORT_DEVICE_BASE, *PSCSI_PORT_DEVICE_BASE;
00088 
00089 typedef struct _SCSI_SG_ADDRESS
00090 {
00091     PHYSICAL_ADDRESS PhysicalAddress;
00092     ULONG Length;
00093 } SCSI_SG_ADDRESS, *PSCSI_SG_ADDRESS;
00094 
00095 typedef struct _SCSI_REQUEST_BLOCK_INFO
00096 {
00097     LIST_ENTRY Requests;
00098     PSCSI_REQUEST_BLOCK Srb;
00099     PCHAR DataOffset;
00100     PVOID SaveSenseRequest;
00101 
00102     ULONG SequenceNumber;
00103 
00104     /* DMA stuff */
00105     PVOID BaseOfMapRegister;
00106     ULONG NumberOfMapRegisters;
00107 
00108     struct _SCSI_REQUEST_BLOCK_INFO *CompletedRequests;
00109 
00110     /* Scatter-gather list */
00111     PSCSI_SG_ADDRESS ScatterGather;
00112     SCSI_SG_ADDRESS ScatterGatherList[MAX_SG_LIST];
00113 } SCSI_REQUEST_BLOCK_INFO, *PSCSI_REQUEST_BLOCK_INFO;
00114 
00115 typedef struct _SCSI_PORT_LUN_EXTENSION
00116 {
00117   UCHAR PathId;
00118   UCHAR TargetId;
00119   UCHAR Lun;
00120 
00121   ULONG Flags;
00122 
00123   struct _SCSI_PORT_LUN_EXTENSION *Next;
00124 
00125   BOOLEAN DeviceClaimed;
00126   PDEVICE_OBJECT DeviceObject;
00127 
00128   INQUIRYDATA InquiryData;
00129 
00130   KDEVICE_QUEUE DeviceQueue;
00131   ULONG SortKey;
00132   ULONG QueueCount;
00133   ULONG MaxQueueCount;
00134 
00135   ULONG AttemptCount;
00136   LONG RequestTimeout;
00137 
00138   PIRP BusyRequest;
00139   PIRP PendingRequest;
00140 
00141   struct _SCSI_PORT_LUN_EXTENSION *ReadyLun;
00142   struct _SCSI_PORT_LUN_EXTENSION *CompletedAbortRequests;
00143 
00144   SCSI_REQUEST_BLOCK_INFO SrbInfo;
00145 
00146   /* More data? */
00147 
00148   UCHAR MiniportLunExtension[1]; /* must be the last entry */
00149 } SCSI_PORT_LUN_EXTENSION, *PSCSI_PORT_LUN_EXTENSION;
00150 
00151 /* Structures for inquiries support */
00152 
00153 typedef struct _SCSI_LUN_INFO
00154 {
00155     UCHAR PathId;
00156     UCHAR TargetId;
00157     UCHAR Lun;
00158     BOOLEAN DeviceClaimed;
00159     PVOID DeviceObject;
00160     struct _SCSI_LUN_INFO *Next;
00161     UCHAR InquiryData[INQUIRYDATABUFFERSIZE];
00162 } SCSI_LUN_INFO, *PSCSI_LUN_INFO;
00163 
00164 typedef struct _SCSI_BUS_SCAN_INFO
00165 {
00166     USHORT Length;
00167     UCHAR LogicalUnitsCount;
00168     UCHAR BusIdentifier;
00169     PSCSI_LUN_INFO LunInfo;
00170 } SCSI_BUS_SCAN_INFO, *PSCSI_BUS_SCAN_INFO;
00171 
00172 typedef struct _BUSES_CONFIGURATION_INFORMATION
00173 {
00174     UCHAR NumberOfBuses;
00175     PSCSI_BUS_SCAN_INFO BusScanInfo[1];
00176 } BUSES_CONFIGURATION_INFORMATION, *PBUSES_CONFIGURATION_INFORMATION;
00177 
00178 
00179 typedef struct _SCSI_PORT_INTERRUPT_DATA
00180 {
00181     ULONG Flags; /* Interrupt-time flags */
00182     PSCSI_REQUEST_BLOCK_INFO CompletedRequests; /* Linked list of Srb info data */
00183     PSCSI_PORT_LUN_EXTENSION CompletedAbort;
00184     PSCSI_PORT_LUN_EXTENSION ReadyLun;
00185     PHW_TIMER HwScsiTimer;
00186     ULONG MiniportTimerValue;
00187 } SCSI_PORT_INTERRUPT_DATA, *PSCSI_PORT_INTERRUPT_DATA;
00188 
00189 
00190 /* Only for interrupt data saving function */
00191 typedef struct _SCSI_PORT_SAVE_INTERRUPT
00192 {
00193     PSCSI_PORT_INTERRUPT_DATA InterruptData;
00194     struct _SCSI_PORT_DEVICE_EXTENSION *DeviceExtension;
00195 } SCSI_PORT_SAVE_INTERRUPT, *PSCSI_PORT_SAVE_INTERRUPT;
00196 
00197 /*
00198  * SCSI_PORT_DEVICE_EXTENSION
00199  *
00200  * DESCRIPTION
00201  *  First part of the port objects device extension. The second
00202  *  part is the miniport-specific device extension.
00203  */
00204 
00205 typedef struct _SCSI_PORT_DEVICE_EXTENSION
00206 {
00207   ULONG Length;
00208   ULONG MiniPortExtensionSize;
00209   PPORT_CONFIGURATION_INFORMATION PortConfig;
00210   PBUSES_CONFIGURATION_INFORMATION BusesConfig;
00211   PVOID NonCachedExtension;
00212   ULONG PortNumber;
00213 
00214   LONG ActiveRequestCounter;
00215   ULONG SrbFlags;
00216   ULONG Flags;
00217 
00218   ULONG BusNum;
00219   ULONG MaxTargedIds;
00220   ULONG MaxLunCount;
00221 
00222   KSPIN_LOCK IrqLock; /* Used when there are 2 irqs */
00223   ULONG SequenceNumber; /* Global sequence number for packets */
00224   KSPIN_LOCK SpinLock;
00225   PKINTERRUPT Interrupt[2];
00226   PIRP                   CurrentIrp;
00227   ULONG IrpFlags;
00228 
00229   SCSI_PORT_TIMER_STATES TimerState;
00230   LONG                   TimerCount;
00231 
00232   KTIMER MiniportTimer;
00233   KDPC MiniportTimerDpc;
00234 
00235   PMAPPED_ADDRESS MappedAddressList;
00236 
00237   ULONG LunExtensionSize;
00238   PSCSI_PORT_LUN_EXTENSION LunExtensionList[LUS_NUMBER];
00239 
00240   SCSI_PORT_INTERRUPT_DATA InterruptData;
00241 
00242   /* SRB extension stuff*/
00243   ULONG SrbExtensionSize;
00244   PVOID SrbExtensionBuffer;
00245   PVOID FreeSrbExtensions;
00246 
00247   /* SRB information */
00248   PSCSI_REQUEST_BLOCK_INFO SrbInfo;
00249   PSCSI_REQUEST_BLOCK_INFO FreeSrbInfo;
00250   ULONG SrbDataCount;
00251 
00252   IO_SCSI_CAPABILITIES PortCapabilities;
00253 
00254   PDEVICE_OBJECT DeviceObject;
00255   PCONTROLLER_OBJECT ControllerObject;
00256 
00257   PHW_INITIALIZE HwInitialize;
00258   PHW_STARTIO HwStartIo;
00259   PHW_INTERRUPT HwInterrupt;
00260   PHW_RESET_BUS HwResetBus;
00261   PHW_DMA_STARTED HwDmaStarted;
00262   PHW_TIMER HwScsiTimer;
00263 
00264   PSCSI_REQUEST_BLOCK OriginalSrb;
00265   SCSI_REQUEST_BLOCK InternalSrb;
00266   SENSE_DATA InternalSenseData;
00267 
00268   /* DMA related stuff */
00269   PADAPTER_OBJECT AdapterObject;
00270   ULONG MapRegisterCount;
00271   BOOLEAN MapBuffers;
00272   BOOLEAN MapRegisters;
00273   PVOID MapRegisterBase;
00274 
00275   /* Features */
00276   BOOLEAN CachesData;
00277   BOOLEAN SupportsTaggedQueuing;
00278   BOOLEAN SupportsAutoSense;
00279   BOOLEAN MultipleReqsPerLun;
00280   BOOLEAN ReceiveEvent;
00281 
00282   PHYSICAL_ADDRESS PhysicalAddress;
00283   ULONG CommonBufferLength;
00284   ULONG InterruptLevel[2];
00285   ULONG IoAddress;
00286 
00287   BOOLEAN NeedSrbExtensionAlloc;
00288   BOOLEAN NeedSrbDataAlloc;
00289 
00290   ULONG RequestsNumber;
00291 
00292   ULONG InterruptCount;
00293 
00294   UCHAR MiniPortDeviceExtension[1]; /* must be the last entry */
00295 } SCSI_PORT_DEVICE_EXTENSION, *PSCSI_PORT_DEVICE_EXTENSION;
00296 
00297 typedef struct _RESETBUS_PARAMS
00298 {
00299     ULONG PathId;
00300     PSCSI_PORT_DEVICE_EXTENSION DeviceExtension;
00301 } RESETBUS_PARAMS, *PRESETBUS_PARAMS;

Generated on Sat May 26 2012 04:27:02 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.