migrate substitution keywords to SVN
[reactos.git] / reactos / include / ddk / srb.h
1 /* $Id$
2 *
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: services/storage/include/srb.c
6 * PURPOSE: SCSI port driver definitions
7 * PROGRAMMER: Eric Kohl (ekohl@rz-online.de)
8 */
9
10 #ifndef __STORAGE_INCLUDE_SRB_H
11 #define __STORAGE_INCLUDE_SRB_H
12
13 #if __GNUC__ >=3
14 #pragma GCC system_header
15 #endif
16
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20
21 #pragma pack(push,4)
22
23 #include "ntddk.h"
24
25 #if defined(_SCSIPORT_)
26 #define SCSIPORTAPI
27 #else
28 #define SCSIPORTAPI
29 #endif
30
31 #define DDKAPI STDCALL
32
33 /* Obsolete. For backward compatibility only. */
34
35 typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
36
37 #define SP_UNINITIALIZED_VALUE ((ULONG) ~0)
38 #define SP_UNTAGGED ((ULONG) ~0)
39
40 #define SRB_SIMPLE_TAG_REQUEST 0x20
41 #define SRB_HEAD_OF_QUEUE_TAG_REQUEST 0x21
42 #define SRB_ORDERED_QUEUE_TAG_REQUEST 0x22
43
44 /* SRB Status Masks */
45
46 #define SRB_STATUS_QUEUE_FROZEN 0x40
47 #define SRB_STATUS_AUTOSENSE_VALID 0x80
48
49 #define SRB_STATUS(Status) \
50 (Status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN))
51
52 #define MAXIMUM_CDB_SIZE 12
53
54 /* Define SCSI maximum configuration parameters. */
55
56 #define SCSI_MAXIMUM_LOGICAL_UNITS 8
57 #define SCSI_MAXIMUM_TARGETS_PER_BUS 32
58 #define SCSI_MAXIMUM_BUSES 8
59 #define SCSI_MINIMUM_PHYSICAL_BREAKS 16
60 #define SCSI_MAXIMUM_PHYSICAL_BREAKS 255
61 #define SCSI_MAXIMUM_TARGETS 8
62
63
64
65 /* Port driver error codes */
66
67 #define SP_BUS_PARITY_ERROR 0x0001
68 #define SP_UNEXPECTED_DISCONNECT 0x0002
69 #define SP_INVALID_RESELECTION 0x0003
70 #define SP_BUS_TIME_OUT 0x0004
71 #define SP_PROTOCOL_ERROR 0x0005
72 #define SP_INTERNAL_ADAPTER_ERROR 0x0006
73 #define SP_REQUEST_TIMEOUT 0x0007
74 #define SP_IRQ_NOT_RESPONDING 0x0008
75 #define SP_BAD_FW_WARNING 0x0009
76 #define SP_BAD_FW_ERROR 0x000a
77
78 /* SCSI_REQUEST_BLOCK.Function constants */
79 #define SRB_FUNCTION_EXECUTE_SCSI 0x00
80 #define SRB_FUNCTION_CLAIM_DEVICE 0x01
81 #define SRB_FUNCTION_IO_CONTROL 0x02
82 #define SRB_FUNCTION_RECEIVE_EVENT 0x03
83 #define SRB_FUNCTION_RELEASE_QUEUE 0x04
84 #define SRB_FUNCTION_ATTACH_DEVICE 0x05
85 #define SRB_FUNCTION_RELEASE_DEVICE 0x06
86 #define SRB_FUNCTION_SHUTDOWN 0x07
87 #define SRB_FUNCTION_FLUSH 0x08
88 #define SRB_FUNCTION_ABORT_COMMAND 0x10
89 #define SRB_FUNCTION_RELEASE_RECOVERY 0x11
90 #define SRB_FUNCTION_RESET_BUS 0x12
91 #define SRB_FUNCTION_RESET_DEVICE 0x13
92 #define SRB_FUNCTION_TERMINATE_IO 0x14
93 #define SRB_FUNCTION_FLUSH_QUEUE 0x15
94 #define SRB_FUNCTION_REMOVE_DEVICE 0x16
95
96 /* SCSI_REQUEST_BLOCK.SrbStatus constants */
97 #define SRB_STATUS_PENDING 0x00
98 #define SRB_STATUS_SUCCESS 0x01
99 #define SRB_STATUS_ABORTED 0x02
100 #define SRB_STATUS_ABORT_FAILED 0x03
101 #define SRB_STATUS_ERROR 0x04
102 #define SRB_STATUS_BUSY 0x05
103 #define SRB_STATUS_INVALID_REQUEST 0x06
104 #define SRB_STATUS_INVALID_PATH_ID 0x07
105 #define SRB_STATUS_NO_DEVICE 0x08
106 #define SRB_STATUS_TIMEOUT 0x09
107 #define SRB_STATUS_SELECTION_TIMEOUT 0x0A
108 #define SRB_STATUS_COMMAND_TIMEOUT 0x0B
109 #define SRB_STATUS_MESSAGE_REJECTED 0x0D
110 #define SRB_STATUS_BUS_RESET 0x0E
111 #define SRB_STATUS_PARITY_ERROR 0x0F
112 #define SRB_STATUS_REQUEST_SENSE_FAILED 0x10
113 #define SRB_STATUS_NO_HBA 0x11
114 #define SRB_STATUS_DATA_OVERRUN 0x12
115 #define SRB_STATUS_UNEXPECTED_BUS_FREE 0x13
116 #define SRB_STATUS_PHASE_SEQUENCE_FAILURE 0x14
117 #define SRB_STATUS_BAD_SRB_BLOCK_LENGTH 0x15
118 #define SRB_STATUS_REQUEST_FLUSHED 0x16
119 #define SRB_STATUS_INVALID_LUN 0x20
120 #define SRB_STATUS_INVALID_TARGET_ID 0x21
121 #define SRB_STATUS_BAD_FUNCTION 0x22
122 #define SRB_STATUS_ERROR_RECOVERY 0x23
123
124 /* SCSI_REQUEST_BLOCK.SrbFlags constants */
125 #define SRB_FLAGS_QUEUE_ACTION_ENABLE 0x00000002
126 #define SRB_FLAGS_DISABLE_DISCONNECT 0x00000004
127 #define SRB_FLAGS_DISABLE_SYNCH_TRANSFER 0x00000008
128 #define SRB_FLAGS_BYPASS_FROZEN_QUEUE 0x00000010
129 #define SRB_FLAGS_DISABLE_AUTOSENSE 0x00000020
130 #define SRB_FLAGS_DATA_IN 0x00000040
131 #define SRB_FLAGS_DATA_OUT 0x00000080
132 #define SRB_FLAGS_NO_DATA_TRANSFER 0x00000000
133 #define SRB_FLAGS_UNSPECIFIED_DIRECTION (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT)
134 #define SRB_FLAGS_NO_QUEUE_FREEZE 0x00000100
135 #define SRB_FLAGS_ADAPTER_CACHE_ENABLE 0x00000200
136 #define SRB_FLAGS_IS_ACTIVE 0x00010000
137 #define SRB_FLAGS_ALLOCATED_FROM_ZONE 0x00020000
138 #define SRB_FLAGS_SGLIST_FROM_POOL 0x00040000
139
140 typedef struct _SCSI_REQUEST_BLOCK {
141 USHORT Length; /* 0x00 */
142 UCHAR Function; /* 0x02 */
143 UCHAR SrbStatus; /* 0x03 */
144 UCHAR ScsiStatus; /* 0x04 */
145 UCHAR PathId; /* 0x05 */
146 UCHAR TargetId; /* 0x06 */
147 UCHAR Lun; /* 0x07 */
148 UCHAR QueueTag; /* 0x08 */
149 UCHAR QueueAction; /* 0x09 */
150 UCHAR CdbLength; /* 0x0A */
151 UCHAR SenseInfoBufferLength; /* 0x0B */
152 ULONG SrbFlags; /* 0x0C */
153 ULONG DataTransferLength; /* 0x10 */
154 ULONG TimeOutValue; /* 0x14 */
155 PVOID DataBuffer; /* 0x18 */
156 PVOID SenseInfoBuffer; /* 0x1C */
157 struct _SCSI_REQUEST_BLOCK *NextSrb; /* 0x20 */
158 PVOID OriginalRequest; /* 0x24 */
159 PVOID SrbExtension; /* 0x28 */
160 ULONG QueueSortKey; /* 0x2C */
161 UCHAR Cdb[16]; /* 0x30 */
162 } SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK;
163
164 #define SCSI_REQUEST_BLOCK_SIZE sizeof(SCSI_REQUEST_BLOCK)
165
166 typedef struct _ACCESS_RANGE {
167 SCSI_PHYSICAL_ADDRESS RangeStart;
168 ULONG RangeLength;
169 BOOLEAN RangeInMemory;
170 }ACCESS_RANGE, *PACCESS_RANGE;
171
172
173 typedef struct _PORT_CONFIGURATION_INFORMATION {
174 ULONG Length;
175 ULONG SystemIoBusNumber;
176 INTERFACE_TYPE AdapterInterfaceType;
177 ULONG BusInterruptLevel;
178 ULONG BusInterruptVector;
179 KINTERRUPT_MODE InterruptMode;
180 ULONG MaximumTransferLength;
181 ULONG NumberOfPhysicalBreaks;
182 ULONG DmaChannel;
183 ULONG DmaPort;
184 DMA_WIDTH DmaWidth;
185 DMA_SPEED DmaSpeed;
186 ULONG AlignmentMask;
187 ULONG NumberOfAccessRanges;
188 #ifdef __GNUC__
189 ACCESS_RANGE *AccessRanges;
190 #else
191 ACCESS_RANGE (*AccessRanges)[];
192 #endif
193 PVOID Reserved;
194 UCHAR NumberOfBuses;
195 CCHAR InitiatorBusId[8];
196 BOOLEAN ScatterGather;
197 BOOLEAN Master;
198 BOOLEAN CachesData;
199 BOOLEAN AdapterScansDown;
200 BOOLEAN AtdiskPrimaryClaimed;
201 BOOLEAN AtdiskSecondaryClaimed;
202 BOOLEAN Dma32BitAddresses;
203 BOOLEAN DemandMode;
204 BOOLEAN MapBuffers;
205 BOOLEAN NeedPhysicalAddresses;
206 BOOLEAN TaggedQueuing;
207 BOOLEAN AutoRequestSense;
208 BOOLEAN MultipleRequestPerLu;
209 BOOLEAN ReceiveEvent;
210 BOOLEAN RealModeInitialized;
211 BOOLEAN BufferAccessScsiPortControlled;
212 UCHAR MaximumNumberOfTargets;
213 UCHAR ReservedUchars[2];
214 ULONG SlotNumber;
215 ULONG BusInterruptLevel2;
216 ULONG BusInterruptVector2;
217 KINTERRUPT_MODE InterruptMode2;
218 ULONG DmaChannel2;
219 ULONG DmaPort2;
220 DMA_WIDTH DmaWidth2;
221 DMA_SPEED DmaSpeed2;
222 ULONG DeviceExtensionSize;
223 ULONG SpecificLuExtensionSize;
224 ULONG SrbExtensionSize;
225 } PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
226
227 #define CONFIG_INFO_VERSION_2 sizeof(PORT_CONFIGURATION_INFORMATION)
228
229 typedef enum _SCSI_NOTIFICATION_TYPE {
230 RequestComplete,
231 NextRequest,
232 NextLuRequest,
233 ResetDetected,
234 CallDisableInterrupts,
235 CallEnableInterrupts,
236 RequestTimerCall
237 } SCSI_NOTIFICATION_TYPE, *PSCSI_NOTIFICATION_TYPE;
238
239
240 typedef BOOLEAN DDKAPI
241 (*PHW_ADAPTER_STATE)(
242 IN PVOID DeviceExtension,
243 IN PVOID Context,
244 IN BOOLEAN SaveState);
245
246 /* Return values for SCSI_HW_FIND_ADAPTER. */
247
248 #define SP_RETURN_NOT_FOUND 0
249 #define SP_RETURN_FOUND 1
250 #define SP_RETURN_ERROR 2
251 #define SP_RETURN_BAD_CONFIG 3
252
253 typedef ULONG DDKAPI
254 (*PHW_FIND_ADAPTER)(
255 IN PVOID DeviceExtension,
256 IN PVOID HwContext,
257 IN PVOID BusInformation,
258 IN PCHAR ArgumentString,
259 IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo,
260 OUT PBOOLEAN Again);
261
262 typedef BOOLEAN DDKAPI
263 (*PHW_INITIALIZE)(
264 IN PVOID DeviceExtension);
265
266 typedef BOOLEAN DDKAPI
267 (*PHW_INTERRUPT)(
268 IN PVOID DeviceExtension);
269
270 typedef BOOLEAN DDKAPI
271 (*PHW_RESET_BUS)(
272 IN PVOID DeviceExtension,
273 IN ULONG PathId);
274
275 typedef VOID DDKAPI
276 (*PHW_DMA_STARTED)(
277 IN PVOID DeviceExtension);
278
279 typedef BOOLEAN DDKAPI
280 (*PHW_STARTIO)(
281 IN PVOID DeviceExtension,
282 IN PSCSI_REQUEST_BLOCK Srb);
283
284 typedef VOID DDKAPI
285 (*PHW_TIMER)(
286 IN PVOID DeviceExtension);
287
288 typedef struct _HW_INITIALIZATION_DATA {
289 ULONG HwInitializationDataSize;
290 INTERFACE_TYPE AdapterInterfaceType;
291 PHW_INITIALIZE HwInitialize;
292 PHW_STARTIO HwStartIo;
293 PHW_INTERRUPT HwInterrupt;
294 PHW_FIND_ADAPTER HwFindAdapter;
295 PHW_RESET_BUS HwResetBus;
296 PHW_DMA_STARTED HwDmaStarted;
297 PHW_ADAPTER_STATE HwAdapterState;
298 ULONG DeviceExtensionSize;
299 ULONG SpecificLuExtensionSize;
300 ULONG SrbExtensionSize;
301 ULONG NumberOfAccessRanges;
302 PVOID Reserved;
303 BOOLEAN MapBuffers;
304 BOOLEAN NeedPhysicalAddresses;
305 // BOOLEAN TaggedQueuing;
306 BOOLEAN TaggedQueueing;
307 BOOLEAN AutoRequestSense;
308 BOOLEAN MultipleRequestPerLu;
309 BOOLEAN ReceiveEvent;
310 USHORT VendorIdLength;
311 PVOID VendorId;
312 USHORT ReservedUshort;
313 USHORT DeviceIdLength;
314 PVOID DeviceId;
315 } HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
316
317
318 /* FUNCTIONS ****************************************************************/
319
320 VOID
321 DDKAPI
322 ScsiPortCompleteRequest(
323 IN PVOID HwDeviceExtension,
324 IN UCHAR PathId,
325 IN UCHAR TargetId,
326 IN UCHAR Lun,
327 IN UCHAR SrbStatus);
328
329 ULONG
330 DDKAPI
331 ScsiPortConvertPhysicalAddressToUlong(
332 IN SCSI_PHYSICAL_ADDRESS Address);
333
334 SCSIPORTAPI
335 SCSI_PHYSICAL_ADDRESS
336 DDKAPI
337 ScsiPortConvertUlongToPhysicalAddress(
338 IN ULONG UlongAddress);
339
340 SCSIPORTAPI
341 VOID
342 DDKAPI
343 ScsiPortFlushDma(
344 IN PVOID HwDeviceExtension);
345
346 SCSIPORTAPI
347 VOID
348 DDKAPI
349 ScsiPortFreeDeviceBase(
350 IN PVOID HwDeviceExtension,
351 IN PVOID MappedAddress);
352
353 SCSIPORTAPI
354 ULONG
355 DDKAPI
356 ScsiPortGetBusData(
357 IN PVOID DeviceExtension,
358 IN ULONG BusDataType,
359 IN ULONG SystemIoBusNumber,
360 IN ULONG SlotNumber,
361 IN PVOID Buffer,
362 IN ULONG Length);
363
364 SCSIPORTAPI
365 PVOID
366 DDKAPI
367 ScsiPortGetDeviceBase(
368 IN PVOID HwDeviceExtension,
369 IN INTERFACE_TYPE BusType,
370 IN ULONG SystemIoBusNumber,
371 IN SCSI_PHYSICAL_ADDRESS IoAddress,
372 IN ULONG NumberOfBytes,
373 IN BOOLEAN InIoSpace);
374
375 SCSIPORTAPI
376 PVOID
377 DDKAPI
378 ScsiPortGetLogicalUnit(
379 IN PVOID HwDeviceExtension,
380 IN UCHAR PathId,
381 IN UCHAR TargetId,
382 IN UCHAR Lun);
383
384 SCSIPORTAPI
385 SCSI_PHYSICAL_ADDRESS
386 DDKAPI
387 ScsiPortGetPhysicalAddress(
388 IN PVOID HwDeviceExtension,
389 IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
390 IN PVOID VirtualAddress,
391 OUT PULONG Length);
392
393 SCSIPORTAPI
394 PSCSI_REQUEST_BLOCK
395 DDKAPI
396 ScsiPortGetSrb(
397 IN PVOID DeviceExtension,
398 IN UCHAR PathId,
399 IN UCHAR TargetId,
400 IN UCHAR Lun,
401 IN LONG QueueTag);
402
403 SCSIPORTAPI
404 PVOID
405 DDKAPI
406 ScsiPortGetUncachedExtension(
407 IN PVOID HwDeviceExtension,
408 IN PPORT_CONFIGURATION_INFORMATION ConfigInfo,
409 IN ULONG NumberOfBytes);
410
411 SCSIPORTAPI
412 PVOID
413 DDKAPI
414 ScsiPortGetVirtualAddress(
415 IN PVOID HwDeviceExtension,
416 IN SCSI_PHYSICAL_ADDRESS PhysicalAddress);
417
418 SCSIPORTAPI
419 ULONG
420 DDKAPI
421 ScsiPortInitialize(
422 IN PVOID Argument1,
423 IN PVOID Argument2,
424 IN struct _HW_INITIALIZATION_DATA *HwInitializationData,
425 IN PVOID HwContext);
426
427 SCSIPORTAPI
428 VOID
429 DDKAPI
430 ScsiPortIoMapTransfer(
431 IN PVOID HwDeviceExtension,
432 IN PSCSI_REQUEST_BLOCK Srb,
433 IN ULONG LogicalAddress,
434 IN ULONG Length);
435
436 SCSIPORTAPI
437 VOID
438 DDKAPI
439 ScsiPortLogError(
440 IN PVOID HwDeviceExtension,
441 IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
442 IN UCHAR PathId,
443 IN UCHAR TargetId,
444 IN UCHAR Lun,
445 IN ULONG ErrorCode,
446 IN ULONG UniqueId);
447
448 SCSIPORTAPI
449 VOID
450 DDKAPI
451 ScsiPortMoveMemory(
452 OUT PVOID Destination,
453 IN PVOID Source,
454 IN ULONG Length);
455
456 SCSIPORTAPI
457 VOID
458 ScsiPortNotification(
459 IN SCSI_NOTIFICATION_TYPE NotificationType,
460 IN PVOID HwDeviceExtension,
461 ...);
462
463 SCSIPORTAPI
464 VOID
465 DDKAPI
466 ScsiPortReadPortBufferUchar(
467 IN PUCHAR Port,
468 IN PUCHAR Value,
469 IN ULONG Count);
470
471 SCSIPORTAPI
472 VOID
473 DDKAPI
474 ScsiPortReadPortBufferUlong(
475 IN PULONG Port,
476 IN PULONG Value,
477 IN ULONG Count);
478
479 SCSIPORTAPI
480 VOID
481 DDKAPI
482 ScsiPortReadPortBufferUshort(
483 IN PUSHORT Port,
484 IN PUSHORT Value,
485 IN ULONG Count);
486
487 SCSIPORTAPI
488 UCHAR
489 DDKAPI
490 ScsiPortReadPortUchar(
491 IN PUCHAR Port);
492
493 SCSIPORTAPI
494 ULONG
495 DDKAPI
496 ScsiPortReadPortUlong(
497 IN PULONG Port);
498
499 SCSIPORTAPI
500 USHORT
501 DDKAPI
502 ScsiPortReadPortUshort(
503 IN PUSHORT Port);
504
505 SCSIPORTAPI
506 VOID
507 DDKAPI
508 ScsiPortReadRegisterBufferUchar(
509 IN PUCHAR Register,
510 IN PUCHAR Buffer,
511 IN ULONG Count);
512
513 SCSIPORTAPI
514 VOID
515 DDKAPI
516 ScsiPortReadRegisterBufferUlong(
517 IN PULONG Register,
518 IN PULONG Buffer,
519 IN ULONG Count);
520
521 SCSIPORTAPI
522 VOID
523 DDKAPI
524 ScsiPortReadRegisterBufferUshort(
525 IN PUSHORT Register,
526 IN PUSHORT Buffer,
527 IN ULONG Count);
528
529 SCSIPORTAPI
530 UCHAR
531 DDKAPI
532 ScsiPortReadRegisterUchar(
533 IN PUCHAR Register);
534
535 SCSIPORTAPI
536 ULONG
537 DDKAPI
538 ScsiPortReadRegisterUlong(
539 IN PULONG Register);
540
541 SCSIPORTAPI
542 USHORT
543 DDKAPI
544 ScsiPortReadRegisterUshort(
545 IN PUSHORT Register);
546
547 SCSIPORTAPI
548 ULONG
549 DDKAPI
550 ScsiPortSetBusDataByOffset(
551 IN PVOID DeviceExtension,
552 IN ULONG BusDataType,
553 IN ULONG SystemIoBusNumber,
554 IN ULONG SlotNumber,
555 IN PVOID Buffer,
556 IN ULONG Offset,
557 IN ULONG Length);
558
559 SCSIPORTAPI
560 VOID
561 DDKAPI
562 ScsiPortStallExecution(
563 IN ULONG MicroSeconds);
564
565 SCSIPORTAPI
566 BOOLEAN
567 DDKAPI
568 ScsiPortValidateRange(
569 IN PVOID HwDeviceExtension,
570 IN INTERFACE_TYPE BusType,
571 IN ULONG SystemIoBusNumber,
572 IN SCSI_PHYSICAL_ADDRESS IoAddress,
573 IN ULONG NumberOfBytes,
574 IN BOOLEAN InIoSpace);
575
576 SCSIPORTAPI
577 VOID
578 DDKAPI
579 ScsiPortWritePortBufferUchar(
580 IN PUCHAR Port,
581 IN PUCHAR Buffer,
582 IN ULONG Count);
583
584 SCSIPORTAPI
585 VOID
586 DDKAPI
587 ScsiPortWritePortBufferUlong(
588 IN PULONG Port,
589 IN PULONG Buffer,
590 IN ULONG Count);
591
592 SCSIPORTAPI
593 VOID
594 DDKAPI
595 ScsiPortWritePortBufferUshort(
596 IN PUSHORT Port,
597 IN PUSHORT Value,
598 IN ULONG Count);
599
600 SCSIPORTAPI
601 VOID
602 DDKAPI
603 ScsiPortWritePortUchar(
604 IN PUCHAR Port,
605 IN UCHAR Value);
606
607 SCSIPORTAPI
608 VOID
609 DDKAPI
610 ScsiPortWritePortUlong(
611 IN PULONG Port,
612 IN ULONG Value);
613
614 SCSIPORTAPI
615 VOID
616 DDKAPI
617 ScsiPortWritePortUshort(
618 IN PUSHORT Port,
619 IN USHORT Value);
620
621 SCSIPORTAPI
622 VOID
623 DDKAPI
624 ScsiPortWriteRegisterBufferUchar(
625 IN PUCHAR Register,
626 IN PUCHAR Buffer,
627 IN ULONG Count);
628
629 SCSIPORTAPI
630 VOID
631 DDKAPI
632 ScsiPortWriteRegisterBufferUlong(
633 IN PULONG Register,
634 IN PULONG Buffer,
635 IN ULONG Count);
636
637 SCSIPORTAPI
638 VOID
639 DDKAPI
640 ScsiPortWriteRegisterBufferUshort(
641 IN PUSHORT Register,
642 IN PUSHORT Buffer,
643 IN ULONG Count);
644
645 SCSIPORTAPI
646 VOID
647 DDKAPI
648 ScsiPortWriteRegisterUchar(
649 IN PUCHAR Register,
650 IN ULONG Value);
651
652 SCSIPORTAPI
653 VOID
654 DDKAPI
655 ScsiPortWriteRegisterUlong(
656 IN PULONG Register,
657 IN ULONG Value);
658
659 SCSIPORTAPI
660 VOID
661 DDKAPI
662 ScsiPortWriteRegisterUshort(
663 IN PUSHORT Register,
664 IN USHORT Value);
665
666 SCSIPORTAPI
667 VOID
668 ScsiDebugPrint(
669 IN ULONG DebugPrintLevel,
670 IN PCHAR DebugMessage,
671 IN ...);
672
673 #pragma pack(pop)
674
675 #ifdef __cplusplus
676 }
677 #endif
678
679 #endif /* __STORAGE_INCLUDE_SRB_H */