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