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