Merge the rest from header branch.
[reactos.git] / reactos / include / ddk / srb.h
1 /*
2 * scsi.h
3 *
4 * Interface between SCSI miniport drivers and the SCSI port driver.
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
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.
20 *
21 */
22
23 #ifndef __SRB_H
24 #define __SRB_H
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 #if defined(_SCSIPORT_)
31 #define SCSIPORTAPI
32 #else
33 #define SCSIPORTAPI DECLSPEC_IMPORT
34 #endif
35
36 #if DBG
37 #define DebugPrint(x) ScsiDebugPrint x
38 #else
39 #define DebugPrint(x)
40 #endif
41
42 typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
43
44 #define SP_UNINITIALIZED_VALUE ((ULONG) ~0)
45 #define SP_UNTAGGED ((UCHAR) ~0)
46
47 #define SRB_SIMPLE_TAG_REQUEST 0x20
48 #define SRB_HEAD_OF_QUEUE_TAG_REQUEST 0x21
49 #define SRB_ORDERED_QUEUE_TAG_REQUEST 0x22
50
51 #define SRB_STATUS_QUEUE_FROZEN 0x40
52 #define SRB_STATUS_AUTOSENSE_VALID 0x80
53
54 #define SRB_STATUS(Status) \
55 (Status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN))
56
57 #define MAXIMUM_CDB_SIZE 12
58
59 #if DBG
60 #define SCSI_PORT_SIGNATURE 0x54524f50
61 #endif
62
63
64 #define SCSI_MAXIMUM_LOGICAL_UNITS 8
65 #define SCSI_MAXIMUM_TARGETS_PER_BUS 128
66 #define SCSI_MAXIMUM_LUNS_PER_TARGET 255
67 #define SCSI_MAXIMUM_BUSES 8
68 #define SCSI_MINIMUM_PHYSICAL_BREAKS 16
69 #define SCSI_MAXIMUM_PHYSICAL_BREAKS 255
70 #define SCSI_MAXIMUM_TARGETS 8
71
72 #define SRB_FUNCTION_WMI 0x17
73
74 #define SRB_WMI_FLAGS_ADAPTER_REQUEST 0x0001
75
76 #define SP_BUS_PARITY_ERROR 0x0001
77 #define SP_UNEXPECTED_DISCONNECT 0x0002
78 #define SP_INVALID_RESELECTION 0x0003
79 #define SP_BUS_TIME_OUT 0x0004
80 #define SP_PROTOCOL_ERROR 0x0005
81 #define SP_INTERNAL_ADAPTER_ERROR 0x0006
82 #define SP_REQUEST_TIMEOUT 0x0007
83 #define SP_IRQ_NOT_RESPONDING 0x0008
84 #define SP_BAD_FW_WARNING 0x0009
85 #define SP_BAD_FW_ERROR 0x000a
86 #define SP_LOST_WMI_MINIPORT_REQUEST 0x000b
87
88 /* SCSI_REQUEST_BLOCK.Function constants */
89 #define SRB_FUNCTION_EXECUTE_SCSI 0x00
90 #define SRB_FUNCTION_CLAIM_DEVICE 0x01
91 #define SRB_FUNCTION_IO_CONTROL 0x02
92 #define SRB_FUNCTION_RECEIVE_EVENT 0x03
93 #define SRB_FUNCTION_RELEASE_QUEUE 0x04
94 #define SRB_FUNCTION_ATTACH_DEVICE 0x05
95 #define SRB_FUNCTION_RELEASE_DEVICE 0x06
96 #define SRB_FUNCTION_SHUTDOWN 0x07
97 #define SRB_FUNCTION_FLUSH 0x08
98 #define SRB_FUNCTION_ABORT_COMMAND 0x10
99 #define SRB_FUNCTION_RELEASE_RECOVERY 0x11
100 #define SRB_FUNCTION_RESET_BUS 0x12
101 #define SRB_FUNCTION_RESET_DEVICE 0x13
102 #define SRB_FUNCTION_TERMINATE_IO 0x14
103 #define SRB_FUNCTION_FLUSH_QUEUE 0x15
104 #define SRB_FUNCTION_REMOVE_DEVICE 0x16
105 #define SRB_FUNCTION_WMI 0x17
106 #define SRB_FUNCTION_LOCK_QUEUE 0x18
107 #define SRB_FUNCTION_UNLOCK_QUEUE 0x19
108 #define SRB_FUNCTION_RESET_LOGICAL_UNIT 0x20
109
110 /* SCSI_REQUEST_BLOCK.SrbStatus constants */
111 #define SRB_STATUS_PENDING 0x00
112 #define SRB_STATUS_SUCCESS 0x01
113 #define SRB_STATUS_ABORTED 0x02
114 #define SRB_STATUS_ABORT_FAILED 0x03
115 #define SRB_STATUS_ERROR 0x04
116 #define SRB_STATUS_BUSY 0x05
117 #define SRB_STATUS_INVALID_REQUEST 0x06
118 #define SRB_STATUS_INVALID_PATH_ID 0x07
119 #define SRB_STATUS_NO_DEVICE 0x08
120 #define SRB_STATUS_TIMEOUT 0x09
121 #define SRB_STATUS_SELECTION_TIMEOUT 0x0A
122 #define SRB_STATUS_COMMAND_TIMEOUT 0x0B
123 #define SRB_STATUS_MESSAGE_REJECTED 0x0D
124 #define SRB_STATUS_BUS_RESET 0x0E
125 #define SRB_STATUS_PARITY_ERROR 0x0F
126 #define SRB_STATUS_REQUEST_SENSE_FAILED 0x10
127 #define SRB_STATUS_NO_HBA 0x11
128 #define SRB_STATUS_DATA_OVERRUN 0x12
129 #define SRB_STATUS_UNEXPECTED_BUS_FREE 0x13
130 #define SRB_STATUS_PHASE_SEQUENCE_FAILURE 0x14
131 #define SRB_STATUS_BAD_SRB_BLOCK_LENGTH 0x15
132 #define SRB_STATUS_REQUEST_FLUSHED 0x16
133 #define SRB_STATUS_INVALID_LUN 0x20
134 #define SRB_STATUS_INVALID_TARGET_ID 0x21
135 #define SRB_STATUS_BAD_FUNCTION 0x22
136 #define SRB_STATUS_ERROR_RECOVERY 0x23
137 #define SRB_STATUS_NOT_POWERED 0x24
138 #define SRB_STATUS_INTERNAL_ERROR 0x30
139
140 /* SCSI_REQUEST_BLOCK.SrbFlags constants */
141 #define SRB_FLAGS_QUEUE_ACTION_ENABLE 0x00000002
142 #define SRB_FLAGS_DISABLE_DISCONNECT 0x00000004
143 #define SRB_FLAGS_DISABLE_SYNCH_TRANSFER 0x00000008
144 #define SRB_FLAGS_BYPASS_FROZEN_QUEUE 0x00000010
145 #define SRB_FLAGS_DISABLE_AUTOSENSE 0x00000020
146 #define SRB_FLAGS_DATA_IN 0x00000040
147 #define SRB_FLAGS_DATA_OUT 0x00000080
148 #define SRB_FLAGS_NO_DATA_TRANSFER 0x00000000
149 #define SRB_FLAGS_UNSPECIFIED_DIRECTION (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT)
150 #define SRB_FLAGS_NO_QUEUE_FREEZE 0x00000100
151 #define SRB_FLAGS_ADAPTER_CACHE_ENABLE 0x00000200
152 #define SRB_FLAGS_FREE_SENSE_BUFFER 0x00000400
153 #define SRB_FLAGS_IS_ACTIVE 0x00010000
154 #define SRB_FLAGS_ALLOCATED_FROM_ZONE 0x00020000
155 #define SRB_FLAGS_SGLIST_FROM_POOL 0x00040000
156 #define SRB_FLAGS_BYPASS_LOCKED_QUEUE 0x00080000
157 #define SRB_FLAGS_NO_KEEP_AWAKE 0x00100000
158 #define SRB_FLAGS_PORT_DRIVER_ALLOCSENSE 0x00200000
159 #define SRB_FLAGS_PORT_DRIVER_SENSEHASPORT 0x00400000
160 #define SRB_FLAGS_DONT_START_NEXT_PACKET 0x00800000
161 #define SRB_FLAGS_PORT_DRIVER_RESERVED 0x0F000000
162 #define SRB_FLAGS_CLASS_DRIVER_RESERVED 0xF0000000
163
164 /* Asynchronous events */
165 #define SRBEV_BUS_RESET 0x0001
166 #define SRBEV_SCSI_ASYNC_NOTIFICATION 0x0002
167
168
169 typedef struct _SCSI_REQUEST_BLOCK {
170 USHORT Length;
171 UCHAR Function;
172 UCHAR SrbStatus;
173 UCHAR ScsiStatus;
174 UCHAR PathId;
175 UCHAR TargetId;
176 UCHAR Lun;
177 UCHAR QueueTag;
178 UCHAR QueueAction;
179 UCHAR CdbLength;
180 UCHAR SenseInfoBufferLength;
181 ULONG SrbFlags;
182 ULONG DataTransferLength;
183 ULONG TimeOutValue;
184 PVOID DataBuffer;
185 PVOID SenseInfoBuffer;
186 struct _SCSI_REQUEST_BLOCK *NextSrb;
187 PVOID OriginalRequest;
188 PVOID SrbExtension;
189 _ANONYMOUS_UNION union {
190 ULONG InternalStatus;
191 ULONG QueueSortKey;
192 } DUMMYUNIONNAME;
193 #if defined(_WIN64)
194 ULONG Reserved;
195 #endif
196 UCHAR Cdb[16];
197 } SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK;
198
199 #define SCSI_REQUEST_BLOCK_SIZE sizeof(SCSI_REQUEST_BLOCK)
200
201 typedef struct _ACCESS_RANGE {
202 SCSI_PHYSICAL_ADDRESS RangeStart;
203 ULONG RangeLength;
204 BOOLEAN RangeInMemory;
205 } ACCESS_RANGE, *PACCESS_RANGE;
206
207 /* PORT_CONFIGURATION_INFORMATION.Dma64BitAddresses constants */
208 #define SCSI_DMA64_MINIPORT_SUPPORTED 0x01
209 #define SCSI_DMA64_SYSTEM_SUPPORTED 0x80
210
211 typedef struct _PORT_CONFIGURATION_INFORMATION {
212 ULONG Length;
213 ULONG SystemIoBusNumber;
214 INTERFACE_TYPE AdapterInterfaceType;
215 ULONG BusInterruptLevel;
216 ULONG BusInterruptVector;
217 KINTERRUPT_MODE InterruptMode;
218 ULONG MaximumTransferLength;
219 ULONG NumberOfPhysicalBreaks;
220 ULONG DmaChannel;
221 ULONG DmaPort;
222 DMA_WIDTH DmaWidth;
223 DMA_SPEED DmaSpeed;
224 ULONG AlignmentMask;
225 ULONG NumberOfAccessRanges;
226 ACCESS_RANGE (*AccessRanges)[];
227 PVOID Reserved;
228 UCHAR NumberOfBuses;
229 UCHAR InitiatorBusId[8];
230 BOOLEAN ScatterGather;
231 BOOLEAN Master;
232 BOOLEAN CachesData;
233 BOOLEAN AdapterScansDown;
234 BOOLEAN AtdiskPrimaryClaimed;
235 BOOLEAN AtdiskSecondaryClaimed;
236 BOOLEAN Dma32BitAddresses;
237 BOOLEAN DemandMode;
238 BOOLEAN MapBuffers;
239 BOOLEAN NeedPhysicalAddresses;
240 BOOLEAN TaggedQueuing;
241 BOOLEAN AutoRequestSense;
242 BOOLEAN MultipleRequestPerLu;
243 BOOLEAN ReceiveEvent;
244 BOOLEAN RealModeInitialized;
245 BOOLEAN BufferAccessScsiPortControlled;
246 UCHAR MaximumNumberOfTargets;
247 UCHAR ReservedUchars[2];
248 ULONG SlotNumber;
249 ULONG BusInterruptLevel2;
250 ULONG BusInterruptVector2;
251 KINTERRUPT_MODE InterruptMode2;
252 ULONG DmaChannel2;
253 ULONG DmaPort2;
254 DMA_WIDTH DmaWidth2;
255 DMA_SPEED DmaSpeed2;
256 ULONG DeviceExtensionSize;
257 ULONG SpecificLuExtensionSize;
258 ULONG SrbExtensionSize;
259 UCHAR Dma64BitAddresses;
260 BOOLEAN ResetTargetSupported;
261 UCHAR MaximumNumberOfLogicalUnits;
262 BOOLEAN WmiDataProvider;
263 } PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
264
265 #define CONFIG_INFO_VERSION_2 sizeof(PORT_CONFIGURATION_INFORMATION)
266
267 typedef enum _SCSI_NOTIFICATION_TYPE {
268 RequestComplete,
269 NextRequest,
270 NextLuRequest,
271 ResetDetected,
272 CallDisableInterrupts,
273 CallEnableInterrupts,
274 RequestTimerCall,
275 BusChangeDetected,
276 WMIEvent,
277 WMIReregister
278 } SCSI_NOTIFICATION_TYPE, *PSCSI_NOTIFICATION_TYPE;
279
280 #ifdef __GNUC__
281 __extension__ /* enums limited to range of integer */
282 #endif
283 typedef enum _SCSI_ADAPTER_CONTROL_TYPE {
284 ScsiQuerySupportedControlTypes = 0,
285 ScsiStopAdapter,
286 ScsiRestartAdapter,
287 ScsiSetBootConfig,
288 ScsiSetRunningConfig,
289 ScsiAdapterControlMax,
290 MakeAdapterControlTypeSizeOfUlong = 0xffffffff
291 } SCSI_ADAPTER_CONTROL_TYPE, *PSCSI_ADAPTER_CONTROL_TYPE;
292
293 typedef enum _SCSI_ADAPTER_CONTROL_STATUS {
294 ScsiAdapterControlSuccess = 0,
295 ScsiAdapterControlUnsuccessful
296 } SCSI_ADAPTER_CONTROL_STATUS, *PSCSI_ADAPTER_CONTROL_STATUS;
297
298 typedef struct _SCSI_SUPPORTED_CONTROL_TYPE_LIST {
299 ULONG MaxControlType;
300 BOOLEAN SupportedTypeList[0];
301 } SCSI_SUPPORTED_CONTROL_TYPE_LIST, *PSCSI_SUPPORTED_CONTROL_TYPE_LIST;
302
303 typedef SCSI_ADAPTER_CONTROL_STATUS
304 (NTAPI *PHW_ADAPTER_CONTROL)(
305 IN PVOID DeviceExtension,
306 IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
307 IN PVOID Parameters);
308
309 typedef BOOLEAN
310 (NTAPI *PHW_ADAPTER_STATE)(
311 IN PVOID DeviceExtension,
312 IN PVOID Context,
313 IN BOOLEAN SaveState);
314
315 #define SP_RETURN_NOT_FOUND 0
316 #define SP_RETURN_FOUND 1
317 #define SP_RETURN_ERROR 2
318 #define SP_RETURN_BAD_CONFIG 3
319
320 typedef ULONG
321 (NTAPI *PHW_FIND_ADAPTER)(
322 IN PVOID DeviceExtension,
323 IN PVOID HwContext,
324 IN PVOID BusInformation,
325 IN PCHAR ArgumentString,
326 IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo,
327 OUT PBOOLEAN Again);
328
329 typedef BOOLEAN
330 (NTAPI *PHW_INITIALIZE)(
331 IN PVOID DeviceExtension);
332
333 typedef BOOLEAN
334 (NTAPI *PHW_INTERRUPT)(
335 IN PVOID DeviceExtension);
336
337 typedef BOOLEAN
338 (NTAPI *PHW_RESET_BUS)(
339 IN PVOID DeviceExtension,
340 IN ULONG PathId);
341
342 typedef VOID
343 (NTAPI *PHW_DMA_STARTED)(
344 IN PVOID DeviceExtension);
345
346 typedef BOOLEAN
347 (NTAPI *PHW_STARTIO)(
348 IN PVOID DeviceExtension,
349 IN PSCSI_REQUEST_BLOCK Srb);
350
351 typedef VOID
352 (NTAPI *PHW_TIMER)(
353 IN PVOID DeviceExtension);
354
355 typedef struct _HW_INITIALIZATION_DATA {
356 ULONG HwInitializationDataSize;
357 INTERFACE_TYPE AdapterInterfaceType;
358 PHW_INITIALIZE HwInitialize;
359 PHW_STARTIO HwStartIo;
360 PHW_INTERRUPT HwInterrupt;
361 PHW_FIND_ADAPTER HwFindAdapter;
362 PHW_RESET_BUS HwResetBus;
363 PHW_DMA_STARTED HwDmaStarted;
364 PHW_ADAPTER_STATE HwAdapterState;
365 ULONG DeviceExtensionSize;
366 ULONG SpecificLuExtensionSize;
367 ULONG SrbExtensionSize;
368 ULONG NumberOfAccessRanges;
369 PVOID Reserved;
370 BOOLEAN MapBuffers;
371 BOOLEAN NeedPhysicalAddresses;
372 BOOLEAN TaggedQueuing;
373 BOOLEAN AutoRequestSense;
374 BOOLEAN MultipleRequestPerLu;
375 BOOLEAN ReceiveEvent;
376 USHORT VendorIdLength;
377 PVOID VendorId;
378 USHORT ReservedUshort;
379 USHORT DeviceIdLength;
380 PVOID DeviceId;
381 PHW_ADAPTER_CONTROL HwAdapterControl;
382 } HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
383
384 SCSIPORTAPI
385 VOID
386 NTAPI
387 ScsiPortCompleteRequest(
388 IN PVOID HwDeviceExtension,
389 IN UCHAR PathId,
390 IN UCHAR TargetId,
391 IN UCHAR Lun,
392 IN UCHAR SrbStatus);
393
394 /*
395 * ULONG
396 * ScsiPortConvertPhysicalAddressToUlong(
397 * IN SCSI_PHYSICAL_ADDRESS Address);
398 */
399 #define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart)
400
401 SCSIPORTAPI
402 SCSI_PHYSICAL_ADDRESS
403 NTAPI
404 ScsiPortConvertUlongToPhysicalAddress(
405 IN ULONG UlongAddress);
406
407 SCSIPORTAPI
408 VOID
409 NTAPI
410 ScsiPortFlushDma(
411 IN PVOID DeviceExtension);
412
413 SCSIPORTAPI
414 VOID
415 NTAPI
416 ScsiPortFreeDeviceBase(
417 IN PVOID HwDeviceExtension,
418 IN PVOID MappedAddress);
419
420 SCSIPORTAPI
421 ULONG
422 NTAPI
423 ScsiPortGetBusData(
424 IN PVOID DeviceExtension,
425 IN ULONG BusDataType,
426 IN ULONG SystemIoBusNumber,
427 IN ULONG SlotNumber,
428 IN PVOID Buffer,
429 IN ULONG Length);
430
431 SCSIPORTAPI
432 PVOID
433 NTAPI
434 ScsiPortGetDeviceBase(
435 IN PVOID HwDeviceExtension,
436 IN INTERFACE_TYPE BusType,
437 IN ULONG SystemIoBusNumber,
438 IN SCSI_PHYSICAL_ADDRESS IoAddress,
439 IN ULONG NumberOfBytes,
440 IN BOOLEAN InIoSpace);
441
442 SCSIPORTAPI
443 PVOID
444 NTAPI
445 ScsiPortGetLogicalUnit(
446 IN PVOID HwDeviceExtension,
447 IN UCHAR PathId,
448 IN UCHAR TargetId,
449 IN UCHAR Lun);
450
451 SCSIPORTAPI
452 SCSI_PHYSICAL_ADDRESS
453 NTAPI
454 ScsiPortGetPhysicalAddress(
455 IN PVOID HwDeviceExtension,
456 IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
457 IN PVOID VirtualAddress,
458 OUT ULONG *Length);
459
460 SCSIPORTAPI
461 PSCSI_REQUEST_BLOCK
462 NTAPI
463 ScsiPortGetSrb(
464 IN PVOID DeviceExtension,
465 IN UCHAR PathId,
466 IN UCHAR TargetId,
467 IN UCHAR Lun,
468 IN LONG QueueTag);
469
470 SCSIPORTAPI
471 PVOID
472 NTAPI
473 ScsiPortGetUncachedExtension(
474 IN PVOID HwDeviceExtension,
475 IN PPORT_CONFIGURATION_INFORMATION ConfigInfo,
476 IN ULONG NumberOfBytes);
477
478 SCSIPORTAPI
479 PVOID
480 NTAPI
481 ScsiPortGetVirtualAddress(
482 IN PVOID HwDeviceExtension,
483 IN SCSI_PHYSICAL_ADDRESS PhysicalAddress);
484
485 SCSIPORTAPI
486 ULONG
487 NTAPI
488 ScsiPortInitialize(
489 IN PVOID Argument1,
490 IN PVOID Argument2,
491 IN struct _HW_INITIALIZATION_DATA *HwInitializationData,
492 IN PVOID HwContext OPTIONAL);
493
494 SCSIPORTAPI
495 VOID
496 NTAPI
497 ScsiPortIoMapTransfer(
498 IN PVOID HwDeviceExtension,
499 IN PSCSI_REQUEST_BLOCK Srb,
500 IN PVOID LogicalAddress,
501 IN ULONG Length);
502
503 SCSIPORTAPI
504 VOID
505 NTAPI
506 ScsiPortLogError(
507 IN PVOID HwDeviceExtension,
508 IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
509 IN UCHAR PathId,
510 IN UCHAR TargetId,
511 IN UCHAR Lun,
512 IN ULONG ErrorCode,
513 IN ULONG UniqueId);
514
515 SCSIPORTAPI
516 VOID
517 NTAPI
518 ScsiPortMoveMemory(
519 IN PVOID WriteBuffer,
520 IN PVOID ReadBuffer,
521 IN ULONG Length);
522
523 SCSIPORTAPI
524 VOID
525 __cdecl
526 ScsiPortNotification(
527 IN SCSI_NOTIFICATION_TYPE NotificationType,
528 IN PVOID HwDeviceExtension,
529 IN ...);
530
531 SCSIPORTAPI
532 VOID
533 NTAPI
534 ScsiPortQuerySystemTime(
535 OUT PLARGE_INTEGER CurrentTime);
536
537 SCSIPORTAPI
538 VOID
539 NTAPI
540 ScsiPortReadPortBufferUchar(
541 IN PUCHAR Port,
542 IN PUCHAR Buffer,
543 IN ULONG Count);
544
545 SCSIPORTAPI
546 VOID
547 NTAPI
548 ScsiPortReadPortBufferUlong(
549 IN PULONG Port,
550 IN PULONG Buffer,
551 IN ULONG Count);
552
553 SCSIPORTAPI
554 VOID
555 NTAPI
556 ScsiPortReadPortBufferUshort(
557 IN PUSHORT Port,
558 IN PUSHORT Buffer,
559 IN ULONG Count);
560
561 SCSIPORTAPI
562 UCHAR
563 NTAPI
564 ScsiPortReadPortUchar(
565 IN PUCHAR Port);
566
567 SCSIPORTAPI
568 ULONG
569 NTAPI
570 ScsiPortReadPortUlong(
571 IN PULONG Port);
572
573 SCSIPORTAPI
574 USHORT
575 NTAPI
576 ScsiPortReadPortUshort(
577 IN PUSHORT Port);
578
579 SCSIPORTAPI
580 VOID
581 NTAPI
582 ScsiPortReadRegisterBufferUchar(
583 IN PUCHAR Register,
584 IN PUCHAR Buffer,
585 IN ULONG Count);
586
587 SCSIPORTAPI
588 VOID
589 NTAPI
590 ScsiPortReadRegisterBufferUlong(
591 IN PULONG Register,
592 IN PULONG Buffer,
593 IN ULONG Count);
594
595 SCSIPORTAPI
596 VOID
597 NTAPI
598 ScsiPortReadRegisterBufferUshort(
599 IN PUSHORT Register,
600 IN PUSHORT Buffer,
601 IN ULONG Count);
602
603 SCSIPORTAPI
604 UCHAR
605 NTAPI
606 ScsiPortReadRegisterUchar(
607 IN PUCHAR Register);
608
609 SCSIPORTAPI
610 ULONG
611 NTAPI
612 ScsiPortReadRegisterUlong(
613 IN PULONG Register);
614
615 SCSIPORTAPI
616 USHORT
617 NTAPI
618 ScsiPortReadRegisterUshort(
619 IN PUSHORT Register);
620
621 SCSIPORTAPI
622 ULONG
623 NTAPI
624 ScsiPortSetBusDataByOffset(
625 IN PVOID DeviceExtension,
626 IN ULONG BusDataType,
627 IN ULONG SystemIoBusNumber,
628 IN ULONG SlotNumber,
629 IN PVOID Buffer,
630 IN ULONG Offset,
631 IN ULONG Length);
632
633 SCSIPORTAPI
634 VOID
635 NTAPI
636 ScsiPortStallExecution(
637 IN ULONG Delay);
638
639 SCSIPORTAPI
640 BOOLEAN
641 NTAPI
642 ScsiPortValidateRange(
643 IN PVOID HwDeviceExtension,
644 IN INTERFACE_TYPE BusType,
645 IN ULONG SystemIoBusNumber,
646 IN SCSI_PHYSICAL_ADDRESS IoAddress,
647 IN ULONG NumberOfBytes,
648 IN BOOLEAN InIoSpace);
649
650 SCSIPORTAPI
651 VOID
652 NTAPI
653 ScsiPortWritePortBufferUchar(
654 IN PUCHAR Port,
655 IN PUCHAR Buffer,
656 IN ULONG Count);
657
658 SCSIPORTAPI
659 VOID
660 NTAPI
661 ScsiPortWritePortBufferUlong(
662 IN PULONG Port,
663 IN PULONG Buffer,
664 IN ULONG Count);
665
666 SCSIPORTAPI
667 VOID
668 NTAPI
669 ScsiPortWritePortBufferUshort(
670 IN PUSHORT Port,
671 IN PUSHORT Buffer,
672 IN ULONG Count);
673
674 SCSIPORTAPI
675 VOID
676 NTAPI
677 ScsiPortWritePortUchar(
678 IN PUCHAR Port,
679 IN UCHAR Value);
680
681 SCSIPORTAPI
682 VOID
683 NTAPI
684 ScsiPortWritePortUlong(
685 IN PULONG Port,
686 IN ULONG Value);
687
688 SCSIPORTAPI
689 VOID
690 NTAPI
691 ScsiPortWritePortUshort(
692 IN PUSHORT Port,
693 IN USHORT Value);
694
695 SCSIPORTAPI
696 VOID
697 NTAPI
698 ScsiPortWriteRegisterBufferUchar(
699 IN PUCHAR Register,
700 IN PUCHAR Buffer,
701 IN ULONG Count);
702
703 SCSIPORTAPI
704 VOID
705 NTAPI
706 ScsiPortWriteRegisterBufferUlong(
707 IN PULONG Register,
708 IN PULONG Buffer,
709 IN ULONG Count);
710
711 SCSIPORTAPI
712 VOID
713 NTAPI
714 ScsiPortWriteRegisterBufferUshort(
715 IN PUSHORT Register,
716 IN PUSHORT Buffer,
717 IN ULONG Count);
718
719 SCSIPORTAPI
720 VOID
721 NTAPI
722 ScsiPortWriteRegisterUchar(
723 IN PUCHAR Register,
724 IN ULONG Value);
725
726 SCSIPORTAPI
727 VOID
728 NTAPI
729 ScsiPortWriteRegisterUlong(
730 IN PULONG Register,
731 IN ULONG Value);
732
733 SCSIPORTAPI
734 VOID
735 NTAPI
736 ScsiPortWriteRegisterUshort(
737 IN PUSHORT Register,
738 IN USHORT Value);
739
740 SCSIPORTAPI
741 VOID
742 __cdecl
743 ScsiDebugPrint(
744 IN ULONG DebugPrintLevel,
745 IN PCCHAR DebugMessage,
746 IN ...);
747
748 #ifdef __cplusplus
749 }
750 #endif
751
752 #endif /* __SRB_H */