4 * Interface between SCSI miniport drivers and the SCSI port driver.
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
30 #define SCSI_MAXIMUM_LOGICAL_UNITS 8
31 #define SCSI_MAXIMUM_TARGETS_PER_BUS 128
32 #define SCSI_MAXIMUM_LUNS_PER_TARGET 255
33 #define SCSI_MAXIMUM_BUSES 8
34 #define SCSI_MINIMUM_PHYSICAL_BREAKS 16
35 #define SCSI_MAXIMUM_PHYSICAL_BREAKS 255
36 #define SCSI_MAXIMUM_TARGETS 8
38 /* PORT_CONFIGURATION_INFORMATION.Dma64BitAddresses constants */
39 #define SCSI_DMA64_MINIPORT_SUPPORTED 0x01
40 #define SCSI_DMA64_SYSTEM_SUPPORTED 0x80
41 #if (NTDDI_VERSION > NTDDI_WS03SP1)
42 #define SCSI_DMA64_MINIPORT_FULL64BIT_SUPPORTED 0x02
45 #define SP_UNINITIALIZED_VALUE ((ULONG) ~0)
46 #define SP_UNTAGGED ((UCHAR) ~0)
48 /* Asynchronous events */
49 #define SRBEV_BUS_RESET 0x0001
50 #define SRBEV_SCSI_ASYNC_NOTIFICATION 0x0002
52 #define MAXIMUM_CDB_SIZE 12
55 #define DebugPrint(x) ScsiDebugPrint x
60 #define SCSI_COMBINE_BUS_TARGET(Bus, Target)( \
61 ((((UCHAR) (Target)) & ~(0x20 - 1)) << 8) | \
62 (((UCHAR) (Bus)) << 5) | \
63 (((UCHAR) (Target)) & (0x20 - 1)))
65 #define SCSI_DECODE_BUS_TARGET(Value, Bus, Target)( \
66 Bus = (UCHAR) ((Value) >> 5), \
67 Target = (UCHAR) ((((Value) >> 8) & ~(0x20 - 1)) | ((Value) & (0x20 - 1))))
69 /* SCSI_REQUEST_BLOCK.Function constants */
70 #define SRB_FUNCTION_EXECUTE_SCSI 0x00
71 #define SRB_FUNCTION_CLAIM_DEVICE 0x01
72 #define SRB_FUNCTION_IO_CONTROL 0x02
73 #define SRB_FUNCTION_RECEIVE_EVENT 0x03
74 #define SRB_FUNCTION_RELEASE_QUEUE 0x04
75 #define SRB_FUNCTION_ATTACH_DEVICE 0x05
76 #define SRB_FUNCTION_RELEASE_DEVICE 0x06
77 #define SRB_FUNCTION_SHUTDOWN 0x07
78 #define SRB_FUNCTION_FLUSH 0x08
79 #define SRB_FUNCTION_ABORT_COMMAND 0x10
80 #define SRB_FUNCTION_RELEASE_RECOVERY 0x11
81 #define SRB_FUNCTION_RESET_BUS 0x12
82 #define SRB_FUNCTION_RESET_DEVICE 0x13
83 #define SRB_FUNCTION_TERMINATE_IO 0x14
84 #define SRB_FUNCTION_FLUSH_QUEUE 0x15
85 #define SRB_FUNCTION_REMOVE_DEVICE 0x16
86 #define SRB_FUNCTION_WMI 0x17
87 #define SRB_FUNCTION_LOCK_QUEUE 0x18
88 #define SRB_FUNCTION_UNLOCK_QUEUE 0x19
89 #define SRB_FUNCTION_RESET_LOGICAL_UNIT 0x20
90 #define SRB_FUNCTION_SET_LINK_TIMEOUT 0x21
91 #define SRB_FUNCTION_LINK_TIMEOUT_OCCURRED 0x22
92 #define SRB_FUNCTION_LINK_TIMEOUT_COMPLETE 0x23
93 #define SRB_FUNCTION_POWER 0x24
94 #define SRB_FUNCTION_PNP 0x25
95 #define SRB_FUNCTION_DUMP_POINTERS 0x26
97 /* SCSI_REQUEST_BLOCK.SrbStatus constants */
98 #define SRB_STATUS_PENDING 0x00
99 #define SRB_STATUS_SUCCESS 0x01
100 #define SRB_STATUS_ABORTED 0x02
101 #define SRB_STATUS_ABORT_FAILED 0x03
102 #define SRB_STATUS_ERROR 0x04
103 #define SRB_STATUS_BUSY 0x05
104 #define SRB_STATUS_INVALID_REQUEST 0x06
105 #define SRB_STATUS_INVALID_PATH_ID 0x07
106 #define SRB_STATUS_NO_DEVICE 0x08
107 #define SRB_STATUS_TIMEOUT 0x09
108 #define SRB_STATUS_SELECTION_TIMEOUT 0x0A
109 #define SRB_STATUS_COMMAND_TIMEOUT 0x0B
110 #define SRB_STATUS_MESSAGE_REJECTED 0x0D
111 #define SRB_STATUS_BUS_RESET 0x0E
112 #define SRB_STATUS_PARITY_ERROR 0x0F
113 #define SRB_STATUS_REQUEST_SENSE_FAILED 0x10
114 #define SRB_STATUS_NO_HBA 0x11
115 #define SRB_STATUS_DATA_OVERRUN 0x12
116 #define SRB_STATUS_UNEXPECTED_BUS_FREE 0x13
117 #define SRB_STATUS_PHASE_SEQUENCE_FAILURE 0x14
118 #define SRB_STATUS_BAD_SRB_BLOCK_LENGTH 0x15
119 #define SRB_STATUS_REQUEST_FLUSHED 0x16
120 #define SRB_STATUS_INVALID_LUN 0x20
121 #define SRB_STATUS_INVALID_TARGET_ID 0x21
122 #define SRB_STATUS_BAD_FUNCTION 0x22
123 #define SRB_STATUS_ERROR_RECOVERY 0x23
124 #define SRB_STATUS_NOT_POWERED 0x24
125 #define SRB_STATUS_LINK_DOWN 0x25
126 #define SRB_STATUS_INTERNAL_ERROR 0x30
128 #define SRB_STATUS_QUEUE_FROZEN 0x40
129 #define SRB_STATUS_AUTOSENSE_VALID 0x80
131 #define SRB_STATUS(Status) \
132 (Status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN))
134 /* SCSI_REQUEST_BLOCK.SrbFlags constants */
135 #define SRB_FLAGS_QUEUE_ACTION_ENABLE 0x00000002
136 #define SRB_FLAGS_DISABLE_DISCONNECT 0x00000004
137 #define SRB_FLAGS_DISABLE_SYNCH_TRANSFER 0x00000008
138 #define SRB_FLAGS_BYPASS_FROZEN_QUEUE 0x00000010
139 #define SRB_FLAGS_DISABLE_AUTOSENSE 0x00000020
140 #define SRB_FLAGS_DATA_IN 0x00000040
141 #define SRB_FLAGS_DATA_OUT 0x00000080
142 #define SRB_FLAGS_NO_DATA_TRANSFER 0x00000000
143 #define SRB_FLAGS_UNSPECIFIED_DIRECTION (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT)
144 #define SRB_FLAGS_NO_QUEUE_FREEZE 0x00000100
145 #define SRB_FLAGS_ADAPTER_CACHE_ENABLE 0x00000200
146 #define SRB_FLAGS_FREE_SENSE_BUFFER 0x00000400
147 #define SRB_FLAGS_IS_ACTIVE 0x00010000
148 #define SRB_FLAGS_ALLOCATED_FROM_ZONE 0x00020000
149 #define SRB_FLAGS_SGLIST_FROM_POOL 0x00040000
150 #define SRB_FLAGS_BYPASS_LOCKED_QUEUE 0x00080000
151 #define SRB_FLAGS_NO_KEEP_AWAKE 0x00100000
152 #define SRB_FLAGS_PORT_DRIVER_ALLOCSENSE 0x00200000
153 #define SRB_FLAGS_PORT_DRIVER_SENSEHASPORT 0x00400000
154 #define SRB_FLAGS_DONT_START_NEXT_PACKET 0x00800000
155 #define SRB_FLAGS_PORT_DRIVER_RESERVED 0x0F000000
156 #define SRB_FLAGS_CLASS_DRIVER_RESERVED 0xF0000000
159 #define SCSI_PORT_SIGNATURE 0x54524f50
162 #define SRB_SIMPLE_TAG_REQUEST 0x20
163 #define SRB_HEAD_OF_QUEUE_TAG_REQUEST 0x21
164 #define SRB_ORDERED_QUEUE_TAG_REQUEST 0x22
166 #define SRB_WMI_FLAGS_ADAPTER_REQUEST 0x0001
167 #define SRB_POWER_FLAGS_ADAPTER_REQUEST 0x0001
168 #define SRB_PNP_FLAGS_ADAPTER_REQUEST 0x0001
170 #define SP_BUS_PARITY_ERROR 0x0001
171 #define SP_UNEXPECTED_DISCONNECT 0x0002
172 #define SP_INVALID_RESELECTION 0x0003
173 #define SP_BUS_TIME_OUT 0x0004
174 #define SP_PROTOCOL_ERROR 0x0005
175 #define SP_INTERNAL_ADAPTER_ERROR 0x0006
176 #define SP_REQUEST_TIMEOUT 0x0007
177 #define SP_IRQ_NOT_RESPONDING 0x0008
178 #define SP_BAD_FW_WARNING 0x0009
179 #define SP_BAD_FW_ERROR 0x000a
180 #define SP_LOST_WMI_MINIPORT_REQUEST 0x000b
182 #define SP_VER_TRACE_SUPPORT 0x0010
184 #define SP_RETURN_NOT_FOUND 0
185 #define SP_RETURN_FOUND 1
186 #define SP_RETURN_ERROR 2
187 #define SP_RETURN_BAD_CONFIG 3
189 typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS
, *PSCSI_PHYSICAL_ADDRESS
;
191 typedef struct _ACCESS_RANGE
{
192 SCSI_PHYSICAL_ADDRESS RangeStart
;
194 BOOLEAN RangeInMemory
;
195 } ACCESS_RANGE
, *PACCESS_RANGE
;
197 typedef struct _PORT_CONFIGURATION_INFORMATION
{
199 ULONG SystemIoBusNumber
;
200 INTERFACE_TYPE AdapterInterfaceType
;
201 ULONG BusInterruptLevel
;
202 ULONG BusInterruptVector
;
203 KINTERRUPT_MODE InterruptMode
;
204 ULONG MaximumTransferLength
;
205 ULONG NumberOfPhysicalBreaks
;
211 ULONG NumberOfAccessRanges
;
212 ACCESS_RANGE (*AccessRanges
)[];
215 UCHAR InitiatorBusId
[8];
216 BOOLEAN ScatterGather
;
219 BOOLEAN AdapterScansDown
;
220 BOOLEAN AtdiskPrimaryClaimed
;
221 BOOLEAN AtdiskSecondaryClaimed
;
222 BOOLEAN Dma32BitAddresses
;
225 BOOLEAN NeedPhysicalAddresses
;
226 BOOLEAN TaggedQueuing
;
227 BOOLEAN AutoRequestSense
;
228 BOOLEAN MultipleRequestPerLu
;
229 BOOLEAN ReceiveEvent
;
230 BOOLEAN RealModeInitialized
;
231 BOOLEAN BufferAccessScsiPortControlled
;
232 UCHAR MaximumNumberOfTargets
;
233 UCHAR ReservedUchars
[2];
235 ULONG BusInterruptLevel2
;
236 ULONG BusInterruptVector2
;
237 KINTERRUPT_MODE InterruptMode2
;
242 ULONG DeviceExtensionSize
;
243 ULONG SpecificLuExtensionSize
;
244 ULONG SrbExtensionSize
;
245 UCHAR Dma64BitAddresses
;
246 BOOLEAN ResetTargetSupported
;
247 UCHAR MaximumNumberOfLogicalUnits
;
248 BOOLEAN WmiDataProvider
;
249 } PORT_CONFIGURATION_INFORMATION
, *PPORT_CONFIGURATION_INFORMATION
;
251 #define CONFIG_INFO_VERSION_2 sizeof(PORT_CONFIGURATION_INFORMATION)
254 __extension__
/* enums limited to range of integer */
256 typedef enum _SCSI_ADAPTER_CONTROL_TYPE
{
257 ScsiQuerySupportedControlTypes
= 0,
261 ScsiSetRunningConfig
,
262 ScsiAdapterControlMax
,
263 MakeAdapterControlTypeSizeOfUlong
= 0xffffffff
264 } SCSI_ADAPTER_CONTROL_TYPE
, *PSCSI_ADAPTER_CONTROL_TYPE
;
266 typedef enum _SCSI_ADAPTER_CONTROL_STATUS
{
267 ScsiAdapterControlSuccess
= 0,
268 ScsiAdapterControlUnsuccessful
269 } SCSI_ADAPTER_CONTROL_STATUS
, *PSCSI_ADAPTER_CONTROL_STATUS
;
271 typedef struct _SCSI_SUPPORTED_CONTROL_TYPE_LIST
{
272 ULONG MaxControlType
;
273 BOOLEAN SupportedTypeList
[0];
274 } SCSI_SUPPORTED_CONTROL_TYPE_LIST
, *PSCSI_SUPPORTED_CONTROL_TYPE_LIST
;
276 typedef struct _SCSI_REQUEST_BLOCK
{
287 UCHAR SenseInfoBufferLength
;
289 ULONG DataTransferLength
;
292 PVOID SenseInfoBuffer
;
293 struct _SCSI_REQUEST_BLOCK
*NextSrb
;
294 PVOID OriginalRequest
;
296 _ANONYMOUS_UNION
union {
297 ULONG InternalStatus
;
299 ULONG LinkTimeoutValue
;
305 } SCSI_REQUEST_BLOCK
, *PSCSI_REQUEST_BLOCK
;
307 #define SCSI_REQUEST_BLOCK_SIZE sizeof(SCSI_REQUEST_BLOCK)
309 typedef struct _SCSI_WMI_REQUEST_BLOCK
{
313 UCHAR WMISubFunction
;
321 ULONG DataTransferLength
;
326 PVOID OriginalRequest
;
329 #if (NTDDI_VERSION >= NTDDI_WS03SP1) && defined(_WIN64)
333 } SCSI_WMI_REQUEST_BLOCK
, *PSCSI_WMI_REQUEST_BLOCK
;
335 typedef enum _STOR_DEVICE_POWER_STATE
{
336 StorPowerDeviceUnspecified
= 0,
341 StorPowerDeviceMaximum
342 } STOR_DEVICE_POWER_STATE
, *PSTOR_DEVICE_POWER_STATE
;
344 typedef enum _STOR_POWER_ACTION
{
345 StorPowerActionNone
= 0,
346 StorPowerActionReserved
,
347 StorPowerActionSleep
,
348 StorPowerActionHibernate
,
349 StorPowerActionShutdown
,
350 StorPowerActionShutdownReset
,
351 StorPowerActionShutdownOff
,
352 StorPowerActionWarmEject
353 } STOR_POWER_ACTION
, *PSTOR_POWER_ACTION
;
355 typedef struct _SCSI_POWER_REQUEST_BLOCK
{
363 STOR_DEVICE_POWER_STATE DevicePowerState
;
365 ULONG DataTransferLength
;
368 PVOID SenseInfoBuffer
;
369 struct _SCSI_REQUEST_BLOCK
*NextSrb
;
370 PVOID OriginalRequest
;
372 STOR_POWER_ACTION PowerAction
;
377 } SCSI_POWER_REQUEST_BLOCK
, *PSCSI_POWER_REQUEST_BLOCK
;
379 typedef enum _STOR_PNP_ACTION
{
380 StorStartDevice
= 0x0,
381 StorRemoveDevice
= 0x2,
382 StorStopDevice
= 0x4,
383 StorQueryCapabilities
= 0x9,
384 StorQueryResourceRequirements
= 0xB,
385 StorFilterResourceRequirements
= 0xD,
386 StorSurpriseRemoval
= 0x17
387 } STOR_PNP_ACTION
, *PSTOR_PNP_ACTION
;
389 typedef struct _STOR_DEVICE_CAPABILITIES
{
393 ULONG LockSupported
:1;
394 ULONG EjectSupported
:1;
398 ULONG SilentInstall
:1;
399 ULONG SurpriseRemovalOK
:1;
400 ULONG NoDisplayInUI
:1;
401 } STOR_DEVICE_CAPABILITIES
, *PSTOR_DEVICE_CAPABILITIES
;
403 typedef struct _SCSI_PNP_REQUEST_BLOCK
{
407 UCHAR PnPSubFunction
;
411 STOR_PNP_ACTION PnPAction
;
413 ULONG DataTransferLength
;
416 PVOID SenseInfoBuffer
;
417 struct _SCSI_REQUEST_BLOCK
*NextSrb
;
418 PVOID OriginalRequest
;
425 } SCSI_PNP_REQUEST_BLOCK
, *PSCSI_PNP_REQUEST_BLOCK
;
428 (NTAPI
*PHW_INITIALIZE
)(
429 IN PVOID DeviceExtension
);
432 (NTAPI
*PHW_STARTIO
)(
433 IN PVOID DeviceExtension
,
434 IN PSCSI_REQUEST_BLOCK Srb
);
437 (NTAPI
*PHW_INTERRUPT
)(
438 IN PVOID DeviceExtension
);
442 IN PVOID DeviceExtension
);
445 (NTAPI
*PHW_DMA_STARTED
)(
446 IN PVOID DeviceExtension
);
449 (NTAPI
*PHW_FIND_ADAPTER
)(
450 IN PVOID DeviceExtension
,
452 IN PVOID BusInformation
,
453 IN PCHAR ArgumentString
,
454 IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo
,
458 (NTAPI
*PHW_RESET_BUS
)(
459 IN PVOID DeviceExtension
,
463 (NTAPI
*PHW_ADAPTER_STATE
)(
464 IN PVOID DeviceExtension
,
466 IN BOOLEAN SaveState
);
468 typedef SCSI_ADAPTER_CONTROL_STATUS
469 (NTAPI
*PHW_ADAPTER_CONTROL
)(
470 IN PVOID DeviceExtension
,
471 IN SCSI_ADAPTER_CONTROL_TYPE ControlType
,
472 IN PVOID Parameters
);
474 typedef enum _SCSI_NOTIFICATION_TYPE
{
479 CallDisableInterrupts
,
480 CallEnableInterrupts
,
488 BufferOverrunDetected
,
490 } SCSI_NOTIFICATION_TYPE
, *PSCSI_NOTIFICATION_TYPE
;
492 typedef struct _HW_INITIALIZATION_DATA
{
493 ULONG HwInitializationDataSize
;
494 INTERFACE_TYPE AdapterInterfaceType
;
495 PHW_INITIALIZE HwInitialize
;
496 PHW_STARTIO HwStartIo
;
497 PHW_INTERRUPT HwInterrupt
;
498 PHW_FIND_ADAPTER HwFindAdapter
;
499 PHW_RESET_BUS HwResetBus
;
500 PHW_DMA_STARTED HwDmaStarted
;
501 PHW_ADAPTER_STATE HwAdapterState
;
502 ULONG DeviceExtensionSize
;
503 ULONG SpecificLuExtensionSize
;
504 ULONG SrbExtensionSize
;
505 ULONG NumberOfAccessRanges
;
508 BOOLEAN NeedPhysicalAddresses
;
509 BOOLEAN TaggedQueuing
;
510 BOOLEAN AutoRequestSense
;
511 BOOLEAN MultipleRequestPerLu
;
512 BOOLEAN ReceiveEvent
;
513 USHORT VendorIdLength
;
515 _ANONYMOUS_UNION
union {
516 USHORT ReservedUshort
;
517 USHORT PortVersionFlags
;
519 USHORT DeviceIdLength
;
521 PHW_ADAPTER_CONTROL HwAdapterControl
;
522 } HW_INITIALIZATION_DATA
, *PHW_INITIALIZATION_DATA
;
527 #define SCSIPORTAPI DECLSPEC_IMPORT
533 ScsiPortCompleteRequest(
534 IN PVOID HwDeviceExtension
,
543 ScsiPortConvertPhysicalAddressToUlong(
544 IN SCSI_PHYSICAL_ADDRESS Address
);
546 #define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart)
547 #define ScsiPortConvertPhysicalAddressToULongPtr(Address) ((ULONG_PTR)((Address).QuadPart))
550 SCSI_PHYSICAL_ADDRESS
552 ScsiPortConvertUlongToPhysicalAddress(
553 IN ULONG UlongAddress
);
559 IN PVOID DeviceExtension
);
564 ScsiPortFreeDeviceBase(
565 IN PVOID HwDeviceExtension
,
566 IN PVOID MappedAddress
);
572 IN PVOID DeviceExtension
,
573 IN ULONG BusDataType
,
574 IN ULONG SystemIoBusNumber
,
582 ScsiPortGetDeviceBase(
583 IN PVOID HwDeviceExtension
,
584 IN INTERFACE_TYPE BusType
,
585 IN ULONG SystemIoBusNumber
,
586 IN SCSI_PHYSICAL_ADDRESS IoAddress
,
587 IN ULONG NumberOfBytes
,
588 IN BOOLEAN InIoSpace
);
593 ScsiPortGetLogicalUnit(
594 IN PVOID HwDeviceExtension
,
600 SCSI_PHYSICAL_ADDRESS
602 ScsiPortGetPhysicalAddress(
603 IN PVOID HwDeviceExtension
,
604 IN PSCSI_REQUEST_BLOCK Srb OPTIONAL
,
605 IN PVOID VirtualAddress
,
612 IN PVOID DeviceExtension
,
621 ScsiPortGetUncachedExtension(
622 IN PVOID HwDeviceExtension
,
623 IN PPORT_CONFIGURATION_INFORMATION ConfigInfo
,
624 IN ULONG NumberOfBytes
);
629 ScsiPortGetVirtualAddress(
630 IN PVOID HwDeviceExtension
,
631 IN SCSI_PHYSICAL_ADDRESS PhysicalAddress
);
639 IN
struct _HW_INITIALIZATION_DATA
*HwInitializationData
,
640 IN PVOID HwContext OPTIONAL
);
645 ScsiPortIoMapTransfer(
646 IN PVOID HwDeviceExtension
,
647 IN PSCSI_REQUEST_BLOCK Srb
,
648 IN PVOID LogicalAddress
,
655 IN PVOID HwDeviceExtension
,
656 IN PSCSI_REQUEST_BLOCK Srb OPTIONAL
,
666 ScsiPortNotification(
667 IN SCSI_NOTIFICATION_TYPE NotificationType
,
668 IN PVOID HwDeviceExtension
,
674 ScsiPortQuerySystemTime(
675 OUT PLARGE_INTEGER CurrentTime
);
680 ScsiPortSetBusDataByOffset(
681 IN PVOID DeviceExtension
,
682 IN ULONG BusDataType
,
683 IN ULONG SystemIoBusNumber
,
692 ScsiPortStallExecution(
698 ScsiPortValidateRange(
699 IN PVOID HwDeviceExtension
,
700 IN INTERFACE_TYPE BusType
,
701 IN ULONG SystemIoBusNumber
,
702 IN SCSI_PHYSICAL_ADDRESS IoAddress
,
703 IN ULONG NumberOfBytes
,
704 IN BOOLEAN InIoSpace
);
710 IN ULONG DebugPrintLevel
,
711 IN PCCHAR DebugMessage
,
714 #if defined(_M_AMD64)
716 #define ScsiPortReadPortUchar READ_PORT_UCHAR
717 #define ScsiPortReadPortUshort READ_PORT_USHORT
718 #define ScsiPortReadPortUlong READ_PORT_ULONG
720 #define ScsiPortReadPortBufferUchar READ_PORT_BUFFER_UCHAR
721 #define ScsiPortReadPortBufferUshort READ_PORT_BUFFER_USHORT
722 #define ScsiPortReadPortBufferUlong READ_PORT_BUFFER_ULONG
724 #define ScsiPortReadRegisterUchar READ_REGISTER_UCHAR
725 #define ScsiPortReadRegisterUshort READ_REGISTER_USHORT
726 #define ScsiPortReadRegisterUlong READ_REGISTER_ULONG
728 #define ScsiPortReadRegisterBufferUchar READ_REGISTER_BUFFER_UCHAR
729 #define ScsiPortReadRegisterBufferUshort READ_REGISTER_BUFFER_USHORT
730 #define ScsiPortReadRegisterBufferUlong READ_REGISTER_BUFFER_ULONG
732 #define ScsiPortWritePortUchar WRITE_PORT_UCHAR
733 #define ScsiPortWritePortUshort WRITE_PORT_USHORT
734 #define ScsiPortWritePortUlong WRITE_PORT_ULONG
736 #define ScsiPortWritePortBufferUchar WRITE_PORT_BUFFER_UCHAR
737 #define ScsiPortWritePortBufferUshort WRITE_PORT_BUFFER_USHORT
738 #define ScsiPortWritePortBufferUlong WRITE_PORT_BUFFER_ULONG
740 #define ScsiPortWriteRegisterUchar WRITE_REGISTER_UCHAR
741 #define ScsiPortWriteRegisterUshort WRITE_REGISTER_USHORT
742 #define ScsiPortWriteRegisterUlong WRITE_REGISTER_ULONG
744 #define ScsiPortWriteRegisterBufferUchar WRITE_REGISTER_BUFFER_UCHAR
745 #define ScsiPortWriteRegisterBufferUshort WRITE_REGISTER_BUFFER_USHORT
746 #define ScsiPortWriteRegisterBufferUlong WRITE_REGISTER_BUFFER_ULONG
748 #define ScsiPortMoveMemory memmove
755 ScsiPortReadPortUchar(
761 ScsiPortReadPortUlong(
767 ScsiPortReadPortUshort(
773 ScsiPortReadPortBufferUchar(
781 ScsiPortReadPortBufferUlong(
789 ScsiPortReadPortBufferUshort(
797 ScsiPortReadRegisterUchar(
803 ScsiPortReadRegisterUlong(
809 ScsiPortReadRegisterUshort(
810 IN PUSHORT Register
);
815 ScsiPortReadRegisterBufferUchar(
823 ScsiPortReadRegisterBufferUlong(
831 ScsiPortReadRegisterBufferUshort(
839 ScsiPortWritePortUchar(
846 ScsiPortWritePortUlong(
853 ScsiPortWritePortUshort(
860 ScsiPortWritePortBufferUchar(
868 ScsiPortWritePortBufferUlong(
876 ScsiPortWritePortBufferUshort(
884 ScsiPortWriteRegisterUchar(
891 ScsiPortWriteRegisterUlong(
898 ScsiPortWriteRegisterUshort(
905 ScsiPortWriteRegisterBufferUchar(
913 ScsiPortWriteRegisterBufferUlong(
921 ScsiPortWriteRegisterBufferUshort(
930 IN PVOID WriteBuffer
,
934 #endif /* defined(_M_AMD64) */