f98f2b720921aecfddb5da1a7087dcfc7c89500a
[reactos.git] / reactos / drivers / storage / scsiport / scsiport_int.h
1 /*
2 * SCSI_PORT_TIMER_STATES
3 *
4 * DESCRIPTION
5 * An enumeration containing the states in the timer DFA
6 */
7
8 #define VERSION "0.0.3"
9
10 #define PAGE_ROUND_UP(x) ( (((ULONG_PTR)x)%PAGE_SIZE) ? ((((ULONG_PTR)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG_PTR)x) )
11 #define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S))
12
13 #define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
14
15 typedef enum _SCSI_PORT_TIMER_STATES
16 {
17 IDETimerIdle,
18 IDETimerCmdWait,
19 IDETimerResetWaitForBusyNegate,
20 IDETimerResetWaitForDrdyAssert
21 } SCSI_PORT_TIMER_STATES;
22
23
24 typedef struct _SCSI_PORT_DEVICE_BASE
25 {
26 LIST_ENTRY List;
27
28 PVOID MappedAddress;
29 ULONG NumberOfBytes;
30 SCSI_PHYSICAL_ADDRESS IoAddress;
31 ULONG SystemIoBusNumber;
32 } SCSI_PORT_DEVICE_BASE, *PSCSI_PORT_DEVICE_BASE;
33
34
35 typedef struct _SCSI_PORT_LUN_EXTENSION
36 {
37 LIST_ENTRY List;
38
39 UCHAR PathId;
40 UCHAR TargetId;
41 UCHAR Lun;
42
43 BOOLEAN DeviceClaimed;
44 PDEVICE_OBJECT DeviceObject;
45
46 INQUIRYDATA InquiryData;
47
48 ULONG PendingIrpCount;
49 ULONG ActiveIrpCount;
50
51 PIRP NextIrp;
52 ULONG Flags;
53
54 /* More data? */
55
56 UCHAR MiniportLunExtension[1]; /* must be the last entry */
57 } SCSI_PORT_LUN_EXTENSION, *PSCSI_PORT_LUN_EXTENSION;
58
59
60 /*
61 * SCSI_PORT_DEVICE_EXTENSION
62 *
63 * DESCRIPTION
64 * First part of the port objects device extension. The second
65 * part is the miniport-specific device extension.
66 */
67
68 typedef struct _SCSI_PORT_DEVICE_EXTENSION
69 {
70 ULONG Length;
71 ULONG MiniPortExtensionSize;
72 PPORT_CONFIGURATION_INFORMATION PortConfig;
73 ULONG PortNumber;
74
75 KSPIN_LOCK Lock;
76 ULONG Flags;
77
78 PKINTERRUPT Interrupt;
79
80 SCSI_PORT_TIMER_STATES TimerState;
81 LONG TimerCount;
82
83 LIST_ENTRY DeviceBaseListHead;
84
85 ULONG LunExtensionSize;
86 LIST_ENTRY LunExtensionListHead;
87
88 ULONG SrbExtensionSize;
89
90 PIO_SCSI_CAPABILITIES PortCapabilities;
91
92 PDEVICE_OBJECT DeviceObject;
93 PCONTROLLER_OBJECT ControllerObject;
94
95 PHW_STARTIO HwStartIo;
96 PHW_INTERRUPT HwInterrupt;
97
98
99 /* DMA related stuff */
100 PADAPTER_OBJECT AdapterObject;
101 ULONG MapRegisterCount;
102
103 PHYSICAL_ADDRESS PhysicalAddress;
104 PVOID VirtualAddress;
105 RTL_BITMAP SrbExtensionAllocMap;
106 ULONG MaxSrbExtensions;
107 ULONG CurrentSrbExtensions;
108 ULONG CommonBufferLength;
109
110 LIST_ENTRY PendingIrpListHead;
111 PIRP NextIrp;
112 ULONG PendingIrpCount;
113 ULONG ActiveIrpCount;
114
115 UCHAR MiniPortDeviceExtension[1]; /* must be the last entry */
116 } SCSI_PORT_DEVICE_EXTENSION, *PSCSI_PORT_DEVICE_EXTENSION;
117
118 typedef struct _SCSI_PORT_SCAN_ADAPTER
119 {
120 KEVENT Event;
121 IO_STATUS_BLOCK IoStatusBlock;
122 NTSTATUS Status;
123 PSCSI_PORT_LUN_EXTENSION LunExtension;
124 ULONG Lun;
125 ULONG Bus;
126 ULONG Target;
127 SCSI_REQUEST_BLOCK Srb;
128 UCHAR DataBuffer[256];
129 BOOL Active;
130 } SCSI_PORT_SCAN_ADAPTER, *PSCSI_PORT_SCAN_ADAPTER;
131
132