- Create KD branch. All debugging support is removed in this branch (no symbols,...
[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 typedef struct _SCSI_REQUEST_BLOCK {
169 USHORT Length;
170 UCHAR Function;
171 UCHAR SrbStatus;
172 UCHAR ScsiStatus;
173 UCHAR PathId;
174 UCHAR TargetId;
175 UCHAR Lun;
176 UCHAR QueueTag;
177 UCHAR QueueAction;
178 UCHAR CdbLength;
179 UCHAR SenseInfoBufferLength;
180 ULONG SrbFlags;
181 ULONG DataTransferLength;
182 ULONG TimeOutValue;
183 PVOID DataBuffer;
184 PVOID SenseInfoBuffer;
185 struct _SCSI_REQUEST_BLOCK *NextSrb;
186 PVOID OriginalRequest;
187 PVOID SrbExtension;
188 _ANONYMOUS_UNION union {
189 ULONG InternalStatus;
190 ULONG QueueSortKey;
191 } DUMMYUNIONNAME;
192 #if defined(_WIN64)
193 ULONG Reserved;
194 #endif
195 UCHAR Cdb[16];
196 } SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK;
197
198 #define SCSI_REQUEST_BLOCK_SIZE sizeof(SCSI_REQUEST_BLOCK)
199
200 typedef struct _ACCESS_RANGE {
201 SCSI_PHYSICAL_ADDRESS RangeStart;
202 ULONG RangeLength;
203 BOOLEAN RangeInMemory;
204 } ACCESS_RANGE, *PACCESS_RANGE;
205
206 /* PORT_CONFIGURATION_INFORMATION.Dma64BitAddresses constants */
207 #define SCSI_DMA64_MINIPORT_SUPPORTED 0x01
208 #define SCSI_DMA64_SYSTEM_SUPPORTED 0x80
209
210 typedef struct _PORT_CONFIGURATION_INFORMATION {
211 ULONG Length;
212 ULONG SystemIoBusNumber;
213 INTERFACE_TYPE AdapterInterfaceType;
214 ULONG BusInterruptLevel;
215 ULONG BusInterruptVector;
216 KINTERRUPT_MODE InterruptMode;
217 ULONG MaximumTransferLength;
218 ULONG NumberOfPhysicalBreaks;
219 ULONG DmaChannel;
220 ULONG DmaPort;
221 DMA_WIDTH DmaWidth;
222 DMA_SPEED DmaSpeed;
223 ULONG AlignmentMask;
224 ULONG NumberOfAccessRanges;
225 ACCESS_RANGE (*AccessRanges)[];
226 PVOID Reserved;
227 UCHAR NumberOfBuses;
228 UCHAR InitiatorBusId[8];
229 BOOLEAN ScatterGather;
230 BOOLEAN Master;
231 BOOLEAN CachesData;
232 BOOLEAN AdapterScansDown;
233 BOOLEAN AtdiskPrimaryClaimed;
234 BOOLEAN AtdiskSecondaryClaimed;
235 BOOLEAN Dma32BitAddresses;
236 BOOLEAN DemandMode;
237 BOOLEAN MapBuffers;
238 BOOLEAN NeedPhysicalAddresses;
239 BOOLEAN TaggedQueuing;
240 BOOLEAN AutoRequestSense;
241 BOOLEAN MultipleRequestPerLu;
242 BOOLEAN ReceiveEvent;
243 BOOLEAN RealModeInitialized;
244 BOOLEAN BufferAccessScsiPortControlled;
245 UCHAR MaximumNumberOfTargets;
246 UCHAR ReservedUchars[2];
247 ULONG SlotNumber;
248 ULONG BusInterruptLevel2;
249 ULONG BusInterruptVector2;
250 KINTERRUPT_MODE InterruptMode2;
251 ULONG DmaChannel2;
252 ULONG DmaPort2;
253 DMA_WIDTH DmaWidth2;
254 DMA_SPEED DmaSpeed2;
255 ULONG DeviceExtensionSize;
256 ULONG SpecificLuExtensionSize;
257 ULONG SrbExtensionSize;
258 UCHAR Dma64BitAddresses;
259 BOOLEAN ResetTargetSupported;
260 UCHAR MaximumNumberOfLogicalUnits;
261 BOOLEAN WmiDataProvider;
262 } PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
263
264 #define CONFIG_INFO_VERSION_2 sizeof(PORT_CONFIGURATION_INFORMATION)
265
266 typedef enum _SCSI_NOTIFICATION_TYPE {
267 RequestComplete,
268 NextRequest,
269 NextLuRequest,
270 ResetDetected,
271 CallDisableInterrupts,
272 CallEnableInterrupts,
273 RequestTimerCall,
274 BusChangeDetected,
275 WMIEvent,
276 WMIReregister
277 } SCSI_NOTIFICATION_TYPE, *PSCSI_NOTIFICATION_TYPE;
278
279 #ifdef __GNUC__
280 __extension__ /* enums limited to range of integer */
281 #endif
282 typedef enum _SCSI_ADAPTER_CONTROL_TYPE {
283 ScsiQuerySupportedControlTypes = 0,
284 ScsiStopAdapter,
285 ScsiRestartAdapter,
286 ScsiSetBootConfig,
287 ScsiSetRunningConfig,
288 ScsiAdapterControlMax,
289 MakeAdapterControlTypeSizeOfUlong = 0xffffffff
290 } SCSI_ADAPTER_CONTROL_TYPE, *PSCSI_ADAPTER_CONTROL_TYPE;
291
292 typedef enum _SCSI_ADAPTER_CONTROL_STATUS {
293 ScsiAdapterControlSuccess = 0,
294 ScsiAdapterControlUnsuccessful
295 } SCSI_ADAPTER_CONTROL_STATUS, *PSCSI_ADAPTER_CONTROL_STATUS;
296
297 typedef struct _SCSI_SUPPORTED_CONTROL_TYPE_LIST {
298 ULONG MaxControlType;
299 BOOLEAN SupportedTypeList[0];
300 } SCSI_SUPPORTED_CONTROL_TYPE_LIST, *PSCSI_SUPPORTED_CONTROL_TYPE_LIST;
301
302 typedef SCSI_ADAPTER_CONTROL_STATUS DDKAPI
303 (*PHW_ADAPTER_CONTROL)(
304 IN PVOID DeviceExtension,
305 IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
306 IN PVOID Parameters);
307
308 typedef BOOLEAN DDKAPI
309 (*PHW_ADAPTER_STATE)(
310 IN PVOID DeviceExtension,
311 IN PVOID Context,
312 IN BOOLEAN SaveState);
313
314 #define SP_RETURN_NOT_FOUND 0
315 #define SP_RETURN_FOUND 1
316 #define SP_RETURN_ERROR 2
317 #define SP_RETURN_BAD_CONFIG 3
318
319 typedef ULONG DDKAPI
320 (*PHW_FIND_ADAPTER)(
321 IN PVOID DeviceExtension,
322 IN PVOID HwContext,
323 IN PVOID BusInformation,
324 IN PCHAR ArgumentString,
325 IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo,
326 OUT PBOOLEAN Again);
327
328 typedef BOOLEAN DDKAPI
329 (*PHW_INITIALIZE)(
330 IN PVOID DeviceExtension);
331
332 typedef BOOLEAN DDKAPI
333 (*PHW_INTERRUPT)(
334 IN PVOID DeviceExtension);
335
336 typedef BOOLEAN DDKAPI
337 (*PHW_RESET_BUS)(
338 IN PVOID DeviceExtension,
339 IN ULONG PathId);
340
341 typedef VOID DDKAPI
342 (*PHW_DMA_STARTED)(
343 IN PVOID DeviceExtension);
344
345 typedef BOOLEAN DDKAPI
346 (*PHW_STARTIO)(
347 IN PVOID DeviceExtension,
348 IN PSCSI_REQUEST_BLOCK Srb);
349
350 typedef VOID DDKAPI
351 (*PHW_TIMER)(
352 IN PVOID DeviceExtension);
353
354 typedef struct _HW_INITIALIZATION_DATA {
355 ULONG HwInitializationDataSize;
356 INTERFACE_TYPE AdapterInterfaceType;
357 PHW_INITIALIZE HwInitialize;
358 PHW_STARTIO HwStartIo;
359 PHW_INTERRUPT HwInterrupt;
360 PHW_FIND_ADAPTER HwFindAdapter;
361 PHW_RESET_BUS HwResetBus;
362 PHW_DMA_STARTED HwDmaStarted;
363 PHW_ADAPTER_STATE HwAdapterState;
364 ULONG DeviceExtensionSize;
365 ULONG SpecificLuExtensionSize;
366 ULONG SrbExtensionSize;
367 ULONG NumberOfAccessRanges;
368 PVOID Reserved;
369 BOOLEAN MapBuffers;
370 BOOLEAN NeedPhysicalAddresses;
371 BOOLEAN TaggedQueuing;
372 BOOLEAN AutoRequestSense;
373 BOOLEAN MultipleRequestPerLu;
374 BOOLEAN ReceiveEvent;
375 USHORT VendorIdLength;
376 PVOID VendorId;
377 USHORT ReservedUshort;
378 USHORT DeviceIdLength;
379 PVOID DeviceId;
380 PHW_ADAPTER_CONTROL HwAdapterControl;
381 } HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
382
383 SCSIPORTAPI
384 VOID
385 DDKAPI
386 ScsiPortCompleteRequest(
387 IN PVOID HwDeviceExtension,
388 IN UCHAR PathId,
389 IN UCHAR TargetId,
390 IN UCHAR Lun,
391 IN UCHAR SrbStatus);
392
393 /*
394 * ULONG
395 * ScsiPortConvertPhysicalAddressToUlong(
396 * IN SCSI_PHYSICAL_ADDRESS Address);
397 */
398 #define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart)
399
400 SCSIPORTAPI
401 SCSI_PHYSICAL_ADDRESS
402 DDKAPI
403 ScsiPortConvertUlongToPhysicalAddress(
404 IN ULONG UlongAddress);
405
406 SCSIPORTAPI
407 VOID
408 DDKAPI
409 ScsiPortFlushDma(
410 IN PVOID DeviceExtension);
411
412 SCSIPORTAPI
413 VOID
414 DDKAPI
415 ScsiPortFreeDeviceBase(
416 IN PVOID HwDeviceExtension,
417 IN PVOID MappedAddress);
418
419 SCSIPORTAPI
420 ULONG
421 DDKAPI
422 ScsiPortGetBusData(
423 IN PVOID DeviceExtension,
424 IN ULONG BusDataType,
425 IN ULONG SystemIoBusNumber,
426 IN ULONG SlotNumber,
427 IN PVOID Buffer,
428 IN ULONG Length);
429
430 SCSIPORTAPI
431 PVOID
432 DDKAPI
433 ScsiPortGetDeviceBase(
434 IN PVOID HwDeviceExtension,
435 IN INTERFACE_TYPE BusType,
436 IN ULONG SystemIoBusNumber,
437 IN SCSI_PHYSICAL_ADDRESS IoAddress,
438 IN ULONG NumberOfBytes,
439 IN BOOLEAN InIoSpace);
440
441 SCSIPORTAPI
442 PVOID
443 DDKAPI
444 ScsiPortGetLogicalUnit(
445 IN PVOID HwDeviceExtension,
446 IN UCHAR PathId,
447 IN UCHAR TargetId,
448 IN UCHAR Lun);
449
450 SCSIPORTAPI
451 SCSI_PHYSICAL_ADDRESS
452 DDKAPI
453 ScsiPortGetPhysicalAddress(
454 IN PVOID HwDeviceExtension,
455 IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
456 IN PVOID VirtualAddress,
457 OUT ULONG *Length);
458
459 SCSIPORTAPI
460 PSCSI_REQUEST_BLOCK
461 DDKAPI
462 ScsiPortGetSrb(
463 IN PVOID DeviceExtension,
464 IN UCHAR PathId,
465 IN UCHAR TargetId,
466 IN UCHAR Lun,
467 IN LONG QueueTag);
468
469 SCSIPORTAPI
470 PVOID
471 DDKAPI
472 ScsiPortGetUncachedExtension(
473 IN PVOID HwDeviceExtension,
474 IN PPORT_CONFIGURATION_INFORMATION ConfigInfo,
475 IN ULONG NumberOfBytes);
476
477 SCSIPORTAPI
478 PVOID
479 DDKAPI
480 ScsiPortGetVirtualAddress(
481 IN PVOID HwDeviceExtension,
482 IN SCSI_PHYSICAL_ADDRESS PhysicalAddress);
483
484 SCSIPORTAPI
485 ULONG
486 DDKAPI
487 ScsiPortInitialize(
488 IN PVOID Argument1,
489 IN PVOID Argument2,
490 IN struct _HW_INITIALIZATION_DATA *HwInitializationData,
491 IN PVOID HwContext OPTIONAL);
492
493 SCSIPORTAPI
494 VOID
495 DDKAPI
496 ScsiPortIoMapTransfer(
497 IN PVOID HwDeviceExtension,
498 IN PSCSI_REQUEST_BLOCK Srb,
499 IN ULONG LogicalAddress,
500 IN ULONG Length);
501
502 SCSIPORTAPI
503 VOID
504 DDKAPI
505 ScsiPortLogError(
506 IN PVOID HwDeviceExtension,
507 IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
508 IN UCHAR PathId,
509 IN UCHAR TargetId,
510 IN UCHAR Lun,
511 IN ULONG ErrorCode,
512 IN ULONG UniqueId);
513
514 SCSIPORTAPI
515 VOID
516 DDKAPI
517 ScsiPortMoveMemory(
518 IN PVOID WriteBuffer,
519 IN PVOID ReadBuffer,
520 IN ULONG Length);
521
522 SCSIPORTAPI
523 VOID
524 DDKCDECLAPI
525 ScsiPortNotification(
526 IN SCSI_NOTIFICATION_TYPE NotificationType,
527 IN PVOID HwDeviceExtension,
528 IN ...);
529
530 SCSIPORTAPI
531 VOID
532 DDKAPI
533 ScsiPortQuerySystemTime(
534 OUT PLARGE_INTEGER CurrentTime);
535
536 SCSIPORTAPI
537 VOID
538 DDKAPI
539 ScsiPortReadPortBufferUchar(
540 IN PUCHAR Port,
541 IN PUCHAR Buffer,
542 IN ULONG Count);
543
544 SCSIPORTAPI
545 VOID
546 DDKAPI
547 ScsiPortReadPortBufferUlong(
548 IN PULONG Port,
549 IN PULONG Buffer,
550 IN ULONG Count);
551
552 SCSIPORTAPI
553 VOID
554 DDKAPI
555 ScsiPortReadPortBufferUshort(
556 IN PUSHORT Port,
557 IN PUSHORT Buffer,
558 IN ULONG Count);
559
560 SCSIPORTAPI
561 UCHAR
562 DDKAPI
563 ScsiPortReadPortUchar(
564 IN PUCHAR Port);
565
566 SCSIPORTAPI
567 ULONG
568 DDKAPI
569 ScsiPortReadPortUlong(
570 IN PULONG Port);
571
572 SCSIPORTAPI
573 USHORT
574 DDKAPI
575 ScsiPortReadPortUshort(
576 IN PUSHORT Port);
577
578 SCSIPORTAPI
579 VOID
580 DDKAPI
581 ScsiPortReadRegisterBufferUchar(
582 IN PUCHAR Register,
583 IN PUCHAR Buffer,
584 IN ULONG Count);
585
586 SCSIPORTAPI
587 VOID
588 DDKAPI
589 ScsiPortReadRegisterBufferUlong(
590 IN PULONG Register,
591 IN PULONG Buffer,
592 IN ULONG Count);
593
594 SCSIPORTAPI
595 VOID
596 DDKAPI
597 ScsiPortReadRegisterBufferUshort(
598 IN PUSHORT Register,
599 IN PUSHORT Buffer,
600 IN ULONG Count);
601
602 SCSIPORTAPI
603 UCHAR
604 DDKAPI
605 ScsiPortReadRegisterUchar(
606 IN PUCHAR Register);
607
608 SCSIPORTAPI
609 ULONG
610 DDKAPI
611 ScsiPortReadRegisterUlong(
612 IN PULONG Register);
613
614 SCSIPORTAPI
615 USHORT
616 DDKAPI
617 ScsiPortReadRegisterUshort(
618 IN PUSHORT Register);
619
620 SCSIPORTAPI
621 ULONG
622 DDKAPI
623 ScsiPortSetBusDataByOffset(
624 IN PVOID DeviceExtension,
625 IN ULONG BusDataType,
626 IN ULONG SystemIoBusNumber,
627 IN ULONG SlotNumber,
628 IN PVOID Buffer,
629 IN ULONG Offset,
630 IN ULONG Length);
631
632 SCSIPORTAPI
633 VOID
634 DDKAPI
635 ScsiPortStallExecution(
636 IN ULONG Delay);
637
638 SCSIPORTAPI
639 BOOLEAN
640 DDKAPI
641 ScsiPortValidateRange(
642 IN PVOID HwDeviceExtension,
643 IN INTERFACE_TYPE BusType,
644 IN ULONG SystemIoBusNumber,
645 IN SCSI_PHYSICAL_ADDRESS IoAddress,
646 IN ULONG NumberOfBytes,
647 IN BOOLEAN InIoSpace);
648
649 SCSIPORTAPI
650 VOID
651 DDKAPI
652 ScsiPortWritePortBufferUchar(
653 IN PUCHAR Port,
654 IN PUCHAR Buffer,
655 IN ULONG Count);
656
657 SCSIPORTAPI
658 VOID
659 DDKAPI
660 ScsiPortWritePortBufferUlong(
661 IN PULONG Port,
662 IN PULONG Buffer,
663 IN ULONG Count);
664
665 SCSIPORTAPI
666 VOID
667 DDKAPI
668 ScsiPortWritePortBufferUshort(
669 IN PUSHORT Port,
670 IN PUSHORT Buffer,
671 IN ULONG Count);
672
673 SCSIPORTAPI
674 VOID
675 DDKAPI
676 ScsiPortWritePortUchar(
677 IN PUCHAR Port,
678 IN UCHAR Value);
679
680 SCSIPORTAPI
681 VOID
682 DDKAPI
683 ScsiPortWritePortUlong(
684 IN PULONG Port,
685 IN ULONG Value);
686
687 SCSIPORTAPI
688 VOID
689 DDKAPI
690 ScsiPortWritePortUshort(
691 IN PUSHORT Port,
692 IN USHORT Value);
693
694 SCSIPORTAPI
695 VOID
696 DDKAPI
697 ScsiPortWriteRegisterBufferUchar(
698 IN PUCHAR Register,
699 IN PUCHAR Buffer,
700 IN ULONG Count);
701
702 SCSIPORTAPI
703 VOID
704 DDKAPI
705 ScsiPortWriteRegisterBufferUlong(
706 IN PULONG Register,
707 IN PULONG Buffer,
708 IN ULONG Count);
709
710 SCSIPORTAPI
711 VOID
712 DDKAPI
713 ScsiPortWriteRegisterBufferUshort(
714 IN PUSHORT Register,
715 IN PUSHORT Buffer,
716 IN ULONG Count);
717
718 SCSIPORTAPI
719 VOID
720 DDKAPI
721 ScsiPortWriteRegisterUchar(
722 IN PUCHAR Register,
723 IN ULONG Value);
724
725 SCSIPORTAPI
726 VOID
727 DDKAPI
728 ScsiPortWriteRegisterUlong(
729 IN PULONG Register,
730 IN ULONG Value);
731
732 SCSIPORTAPI
733 VOID
734 DDKAPI
735 ScsiPortWriteRegisterUshort(
736 IN PUSHORT Register,
737 IN USHORT Value);
738
739 SCSIPORTAPI
740 VOID
741 DDKCDECLAPI
742 ScsiDebugPrint(
743 IN ULONG DebugPrintLevel,
744 IN PCCHAR DebugMessage,
745 IN ...);
746
747 #ifdef __cplusplus
748 }
749 #endif
750
751 #endif /* __SRB_H */