Annotation of ntddk/src/scsi/inc/srb.h, revision 1.1.1.1

1.1       root        1: /*++
                      2: 
                      3: Coyright (c) 1991  Microsoft Corporation
                      4: 
                      5: Module Name:
                      6: 
                      7:     srb.h
                      8: 
                      9: Abstract:
                     10: 
                     11:     This file defines the interface between SCSI mini-port drivers and the
                     12:     SCSI port driver.  It is also used by SCSI class drivers to talk to the
                     13:     SCSI port driver.
                     14: 
                     15: Author:
                     16: 
                     17:     Mike Glass
                     18: 
                     19: Notes:
                     20: 
                     21: Revision History:
                     22: 
                     23: --*/
                     24: #ifndef _NTSRB_
                     25: #define _NTSRB_
                     26: 
                     27: #if DBG
                     28: #define DebugPrint(x) ScsiDebugPrint x
                     29: #else
                     30: #define DebugPrint(x)
                     31: #endif
                     32: 
                     33: typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
                     34: 
                     35: typedef struct _ACCESS_RANGE {
                     36:     SCSI_PHYSICAL_ADDRESS RangeStart;
                     37:     ULONG RangeLength;
                     38:     BOOLEAN RangeInMemory;
                     39: }ACCESS_RANGE, *PACCESS_RANGE;
                     40: 
                     41: //
                     42: // Configuration information structure.  Contains the information necessary
                     43: // to initialize the adapter.
                     44: //
                     45: 
                     46: typedef struct _PORT_CONFIGURATION_INFORMATION {
                     47: 
                     48:     //
                     49:     // Length of port configuation information strucuture.
                     50:     //
                     51: 
                     52:     ULONG Length;
                     53: 
                     54:     //
                     55:     // IO bus number (0 for machines that have only 1 IO bus
                     56:     //
                     57: 
                     58:     ULONG SystemIoBusNumber;
                     59: 
                     60:     //
                     61:     // EISA, MCA or ISA
                     62:     //
                     63: 
                     64:     INTERFACE_TYPE  AdapterInterfaceType;
                     65: 
                     66:     //
                     67:     // Interrupt request level for device
                     68:     //
                     69: 
                     70:     ULONG BusInterruptLevel;
                     71: 
                     72:     //
                     73:     // Bus interrupt vector used with hardware buses which use as vector as
                     74:     // well as level, such as internal buses.
                     75:     //
                     76: 
                     77:     ULONG BusInterruptVector;
                     78: 
                     79:     //
                     80:     // Interrupt mode (level-sensitive or edge-triggered)
                     81:     //
                     82: 
                     83:     KINTERRUPT_MODE InterruptMode;
                     84: 
                     85:     //
                     86:     // Maximum number of bytes that can be transferred in a single SRB
                     87:     //
                     88: 
                     89:     ULONG MaximumTransferLength;
                     90: 
                     91:     //
                     92:     // Number of contiguous blocks of physical memory
                     93:     //
                     94: 
                     95:     ULONG NumberOfPhysicalBreaks;
                     96: 
                     97:     //
                     98:     // DMA channel for devices using system DMA
                     99:     //
                    100: 
                    101:     ULONG DmaChannel;
                    102:     ULONG DmaPort;
                    103:     DMA_WIDTH DmaWidth;
                    104:     DMA_SPEED DmaSpeed;
                    105: 
                    106:     //
                    107:     // Alignment masked required by the adapter for data transfers.
                    108:     //
                    109: 
                    110:     ULONG AlignmentMask;
                    111: 
                    112:     //
                    113:     // Number of access range elements which have been allocated.
                    114:     //
                    115: 
                    116:     ULONG NumberOfAccessRanges;
                    117: 
                    118:     //
                    119:     // Pointer to array of access range elements.
                    120:     //
                    121: 
                    122:     ACCESS_RANGE (*AccessRanges)[];
                    123: 
                    124:     //
                    125:     // Reserved field.
                    126:     //
                    127: 
                    128:     PVOID Reserved;
                    129: 
                    130:     //
                    131:     // Number of SCSI buses attached to the adapter.
                    132:     //
                    133: 
                    134:     UCHAR NumberOfBuses;
                    135: 
                    136:     //
                    137:     // SCSI bus ID for adapter
                    138:     //
                    139: 
                    140:     CCHAR InitiatorBusId[8];
                    141: 
                    142:     //
                    143:     // Indicates that the adapter does scatter/gather
                    144:     //
                    145: 
                    146:     BOOLEAN ScatterGather;
                    147: 
                    148:     //
                    149:     // Indicates that the adapter is a bus master
                    150:     //
                    151: 
                    152:     BOOLEAN Master;
                    153: 
                    154:     //
                    155:     // Host caches data or state.
                    156:     //
                    157: 
                    158:     BOOLEAN CachesData;
                    159: 
                    160:     //
                    161:     // Host adapter scans down for bios devices.
                    162:     //
                    163: 
                    164:     BOOLEAN AdapterScansDown;
                    165: 
                    166:     //
                    167:     // Primary at disk address (0x1F0) claimed.
                    168:     //
                    169: 
                    170:     BOOLEAN AtdiskPrimaryClaimed;
                    171: 
                    172:     //
                    173:     // Secondary at disk address (0x170) claimed.
                    174:     //
                    175: 
                    176:     BOOLEAN AtdiskSecondaryClaimed;
                    177: 
                    178:     //
                    179:     // The master uses 32-bit DMA addresses.
                    180:     //
                    181: 
                    182:     BOOLEAN Dma32BitAddresses;
                    183: 
                    184:     //
                    185:     // Use Demand Mode DMA rather than Single Request.
                    186:     //
                    187: 
                    188:     BOOLEAN DemandMode;
                    189: 
                    190:     //
                    191:     // Data buffers must be mapped into virtual address space.
                    192:     //
                    193: 
                    194:     BOOLEAN MapBuffers;
                    195: 
                    196:     //
                    197:     // The driver will need to tranlate virtual to physical addresses.
                    198:     //
                    199: 
                    200:     BOOLEAN NeedPhysicalAddresses;
                    201: 
                    202:     //
                    203:     // Supports tagged queuing
                    204:     //
                    205: 
                    206:     BOOLEAN TaggedQueuing;
                    207: 
                    208:     //
                    209:     // Supports auto request sense.
                    210:     //
                    211: 
                    212:     BOOLEAN AutoRequestSense;
                    213: 
                    214:     //
                    215:     // Supports multiple requests per logical unit.
                    216:     //
                    217: 
                    218:     BOOLEAN MultipleRequestPerLu;
                    219: 
                    220:     //
                    221:     // Support receive event function.
                    222:     //
                    223: 
                    224:     BOOLEAN ReceiveEvent;
                    225: 
                    226:     //
                    227:     // Indicates the real-mode driver has initialized the card.
                    228:     //
                    229: 
                    230:     BOOLEAN RealModeInitialized;
                    231: 
                    232: } PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
                    233: 
                    234: //
                    235: // Uninitialized flag value.
                    236: //
                    237: 
                    238: #define SP_UNINITIALIZED_VALUE ((ULONG) ~0)
                    239: #define SP_UNTAGGED ((UCHAR) ~0)
                    240: 
                    241: //
                    242: // Set asynchronous events.
                    243: //
                    244: 
                    245: #define SRBEV_BUS_RESET               0x0001
                    246: #define SRBEV_SCSI_ASYNC_NOTIFICATION 0x0002
                    247: 
                    248: //
                    249: // SCSI I/O Request Block
                    250: //
                    251: 
                    252: typedef struct _SCSI_REQUEST_BLOCK {
                    253:     USHORT Length;                  // offset 0
                    254:     UCHAR Function;                 // offset 2
                    255:     UCHAR SrbStatus;                // offset 3
                    256:     UCHAR ScsiStatus;               // offset 4
                    257:     UCHAR PathId;                   // offset 5
                    258:     UCHAR TargetId;                 // offset 6
                    259:     UCHAR Lun;                      // offset 7
                    260:     UCHAR QueueTag;                 // offset 8
                    261:     UCHAR QueueAction;              // offset 9
                    262:     UCHAR CdbLength;                // offset 10
                    263:     UCHAR SenseInfoBufferLength;    // offset 11
                    264:     ULONG SrbFlags;                 // offset 12
                    265:     ULONG DataTransferLength;       // offset 16
                    266:     ULONG TimeOutValue;             // offset 20
                    267:     PVOID DataBuffer;               // offset 24
                    268:     PVOID SenseInfoBuffer;          // offset 28
                    269:     struct _SCSI_REQUEST_BLOCK *NextSrb; // offset 32
                    270:     PVOID OriginalRequest;          // offset 36
                    271:     PVOID SrbExtension;             // offset 40
                    272:     ULONG QueueSortKey;             // offset 44
                    273:     UCHAR Cdb[16];                  // offset 48
                    274: } SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK;
                    275: 
                    276: #define SCSI_REQUEST_BLOCK_SIZE sizeof(SCSI_REQUEST_BLOCK)
                    277: 
                    278: //
                    279: // SRB Functions
                    280: //
                    281: 
                    282: #define SRB_FUNCTION_EXECUTE_SCSI           0x00
                    283: #define SRB_FUNCTION_CLAIM_DEVICE           0x01
                    284: #define SRB_FUNCTION_IO_CONTROL             0x02
                    285: #define SRB_FUNCTION_RECEIVE_EVENT          0x03
                    286: #define SRB_FUNCTION_RELEASE_QUEUE          0x04
                    287: #define SRB_FUNCTION_ATTACH_DEVICE          0x05
                    288: #define SRB_FUNCTION_RELEASE_DEVICE         0x06
                    289: #define SRB_FUNCTION_SHUTDOWN               0x07
                    290: #define SRB_FUNCTION_FLUSH                  0x08
                    291: #define SRB_FUNCTION_ABORT_COMMAND          0x10
                    292: #define SRB_FUNCTION_RELEASE_RECOVERY       0x11
                    293: #define SRB_FUNCTION_RESET_BUS              0x12
                    294: #define SRB_FUNCTION_RESET_DEVICE           0x13
                    295: #define SRB_FUNCTION_TERMINATE_IO           0x14
                    296: #define SRB_FUNCTION_FLUSH_QUEUE            0x15
                    297: 
                    298: //
                    299: // SRB Status
                    300: //
                    301: 
                    302: #define SRB_STATUS_PENDING                  0x00
                    303: #define SRB_STATUS_SUCCESS                  0x01
                    304: #define SRB_STATUS_ABORTED                  0x02
                    305: #define SRB_STATUS_ABORT_FAILED             0x03
                    306: #define SRB_STATUS_ERROR                    0x04
                    307: #define SRB_STATUS_BUSY                     0x05
                    308: #define SRB_STATUS_INVALID_REQUEST          0x06
                    309: #define SRB_STATUS_INVALID_PATH_ID          0x07
                    310: #define SRB_STATUS_NO_DEVICE                0x08
                    311: #define SRB_STATUS_TIMEOUT                  0x09
                    312: #define SRB_STATUS_SELECTION_TIMEOUT        0x0A
                    313: #define SRB_STATUS_COMMAND_TIMEOUT          0x0B
                    314: #define SRB_STATUS_MESSAGE_REJECTED         0x0D
                    315: #define SRB_STATUS_BUS_RESET                0x0E
                    316: #define SRB_STATUS_PARITY_ERROR             0x0F
                    317: #define SRB_STATUS_REQUEST_SENSE_FAILED     0x10
                    318: #define SRB_STATUS_NO_HBA                   0x11
                    319: #define SRB_STATUS_DATA_OVERRUN             0x12
                    320: #define SRB_STATUS_UNEXPECTED_BUS_FREE      0x13
                    321: #define SRB_STATUS_PHASE_SEQUENCE_FAILURE   0x14
                    322: #define SRB_STATUS_BAD_SRB_BLOCK_LENGTH     0x15
                    323: #define SRB_STATUS_REQUEST_FLUSHED          0x16
                    324: #define SRB_STATUS_INVALID_LUN              0x20
                    325: #define SRB_STATUS_INVALID_TARGET_ID        0x21
                    326: #define SRB_STATUS_BAD_FUNCTION             0x22
                    327: #define SRB_STATUS_ERROR_RECOVERY           0x23
                    328: 
                    329: //
                    330: // SRB Status Masks
                    331: //
                    332: 
                    333: #define SRB_STATUS_QUEUE_FROZEN             0x40
                    334: #define SRB_STATUS_AUTOSENSE_VALID          0x80
                    335: 
                    336: #define SRB_STATUS(Status) (Status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN))
                    337: 
                    338: //
                    339: // SRB Flag Bits
                    340: //
                    341: 
                    342: #define SRB_FLAGS_QUEUE_ACTION_ENABLE       0x00000002
                    343: #define SRB_FLAGS_DISABLE_DISCONNECT        0x00000004
                    344: #define SRB_FLAGS_DISABLE_SYNCH_TRANSFER    0x00000008
                    345: #define SRB_FLAGS_BYPASS_FROZEN_QUEUE       0x00000010
                    346: #define SRB_FLAGS_DISABLE_AUTOSENSE         0x00000020
                    347: #define SRB_FLAGS_DATA_IN                   0x00000040
                    348: #define SRB_FLAGS_DATA_OUT                  0x00000080
                    349: #define SRB_FLAGS_NO_DATA_TRANSFER          0x00000000
                    350: #define SRB_FLAGS_UNSPECIFIED_DIRECTION     (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT)
                    351: #define SRB_FLAGS_NO_QUEUE_FREEZE           0x00000100
                    352: #define SRB_FLAGS_ADAPTER_CACHE_ENABLE      0x00000200
                    353: #define SRB_FLAGS_IS_ACTIVE                 0x00010000
                    354: #define SRB_FLAGS_ALLOCATED_FROM_ZONE       0x00020000
                    355: 
                    356: //
                    357: // Queue Action
                    358: //
                    359: 
                    360: #define SRB_SIMPLE_TAG_REQUEST              0x20
                    361: #define SRB_HEAD_OF_QUEUE_TAG_REQUEST       0x21
                    362: #define SRB_ORDERED_QUEUE_TAG_REQUEST       0x22
                    363: 
                    364: //
                    365: // SCSI Adapter Dependent Routines
                    366: //
                    367: 
                    368: typedef
                    369: BOOLEAN
                    370: (*PHW_INITIALIZE) (
                    371:     IN PVOID DeviceExtension
                    372:     );
                    373: 
                    374: typedef
                    375: BOOLEAN
                    376: (*PHW_STARTIO) (
                    377:     IN PVOID DeviceExtension,
                    378:     IN PSCSI_REQUEST_BLOCK Srb
                    379:     );
                    380: 
                    381: typedef
                    382: BOOLEAN
                    383: (*PHW_INTERRUPT) (
                    384:     IN PVOID DeviceExtension
                    385:     );
                    386: 
                    387: typedef
                    388: VOID
                    389: (*PHW_TIMER) (
                    390:     IN PVOID DeviceExtension
                    391:     );
                    392: 
                    393: typedef
                    394: VOID
                    395: (*PHW_DMA_STARTED) (
                    396:     IN PVOID DeviceExtension
                    397:     );
                    398: 
                    399: typedef
                    400: ULONG
                    401: (*PHW_FIND_ADAPTER) (
                    402:     IN PVOID DeviceExtension,
                    403:     IN PVOID HwContext,
                    404:     IN PVOID BusInformation,
                    405:     IN PCHAR ArgumentString,
                    406:     IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo,
                    407:     OUT PBOOLEAN Again
                    408:     );
                    409: 
                    410: typedef
                    411: BOOLEAN
                    412: (*PHW_RESET_BUS) (
                    413:     IN PVOID DeviceExtension,
                    414:     IN ULONG PathId
                    415:     );
                    416: 
                    417: typedef
                    418: BOOLEAN
                    419: (*PHW_ADAPTER_STATE) (
                    420:     IN PVOID DeviceExtension,
                    421:     IN PVOID Context,
                    422:     IN BOOLEAN SaveState
                    423:     );
                    424: 
                    425: //
                    426: // Port driver error codes
                    427: //
                    428: 
                    429: #define SP_BUS_PARITY_ERROR         0x0001
                    430: #define SP_UNEXPECTED_DISCONNECT    0x0002
                    431: #define SP_INVALID_RESELECTION      0x0003
                    432: #define SP_BUS_TIME_OUT             0x0004
                    433: #define SP_PROTOCOL_ERROR           0x0005
                    434: #define SP_INTERNAL_ADAPTER_ERROR   0x0006
                    435: #define SP_REQUEST_TIMEOUT          0x0007
                    436: #define SP_IRQ_NOT_RESPONDING       0x0008
                    437: #define SP_BAD_FW_WARNING           0x0009
                    438: #define SP_BAD_FW_ERROR             0x000a
                    439: 
                    440: //
                    441: // Return values for SCSI_HW_FIND_ADAPTER.
                    442: //
                    443: 
                    444: #define SP_RETURN_NOT_FOUND     0
                    445: #define SP_RETURN_FOUND         1
                    446: #define SP_RETURN_ERROR         2
                    447: #define SP_RETURN_BAD_CONFIG    3
                    448: 
                    449: //
                    450: // Notification Event Types
                    451: //
                    452: 
                    453: typedef enum _SCSI_NOTIFICATION_TYPE {
                    454:     RequestComplete,
                    455:     NextRequest,
                    456:     NextLuRequest,
                    457:     ResetDetected,
                    458:     CallDisableInterrupts,
                    459:     CallEnableInterrupts,
                    460:     RequestTimerCall
                    461: } SCSI_NOTIFICATION_TYPE, *PSCSI_NOTIFICATION_TYPE;
                    462: 
                    463: //
                    464: // Structure passed between miniport initialization
                    465: // and SCSI port initialization
                    466: //
                    467: 
                    468: typedef struct _HW_INITIALIZATION_DATA {
                    469: 
                    470:     ULONG HwInitializationDataSize;
                    471: 
                    472:     INTERFACE_TYPE  AdapterInterfaceType;
                    473: 
                    474:     PHW_INITIALIZE HwInitialize;
                    475: 
                    476:     PHW_STARTIO HwStartIo;
                    477: 
                    478:     PHW_INTERRUPT HwInterrupt;
                    479: 
                    480:     PHW_FIND_ADAPTER HwFindAdapter;
                    481: 
                    482:     PHW_RESET_BUS HwResetBus;
                    483: 
                    484:     PHW_DMA_STARTED HwDmaStarted;
                    485: 
                    486:     PHW_ADAPTER_STATE HwAdapterState;
                    487: 
                    488:     ULONG DeviceExtensionSize;
                    489: 
                    490:     ULONG SpecificLuExtensionSize;
                    491: 
                    492:     ULONG SrbExtensionSize;
                    493: 
                    494:     ULONG NumberOfAccessRanges;
                    495: 
                    496:     PVOID Reserved;
                    497: 
                    498:     //
                    499:     // Data buffers must be mapped into virtual address space.
                    500:     //
                    501: 
                    502:     BOOLEAN MapBuffers;
                    503: 
                    504:     //
                    505:     // The driver will need to tranlate virtual to physical addresses.
                    506:     //
                    507: 
                    508:     BOOLEAN NeedPhysicalAddresses;
                    509: 
                    510:     //
                    511:     // Supports tagged queuing
                    512:     //
                    513: 
                    514:     BOOLEAN TaggedQueuing;
                    515: 
                    516:     //
                    517:     // Supports auto request sense.
                    518:     //
                    519: 
                    520:     BOOLEAN AutoRequestSense;
                    521: 
                    522:     //
                    523:     // Supports multiple requests per logical unit.
                    524:     //
                    525: 
                    526:     BOOLEAN MultipleRequestPerLu;
                    527: 
                    528:     //
                    529:     // Support receive event function.
                    530:     //
                    531: 
                    532:     BOOLEAN ReceiveEvent;
                    533: 
                    534: } HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
                    535: 
                    536: //
                    537: // Port driver routines called by miniport driver
                    538: //
                    539: 
                    540: ULONG
                    541: ScsiPortInitialize(
                    542:     IN PVOID Argument1,
                    543:     IN PVOID Argument2,
                    544:     IN struct _HW_INITIALIZATION_DATA *HwInitializationData,
                    545:     IN PVOID HwContext
                    546:     );
                    547: 
                    548: VOID
                    549: ScsiPortFreeDeviceBase(
                    550:     IN PVOID HwDeviceExtension,
                    551:     IN PVOID MappedAddress
                    552:     );
                    553: 
                    554: ULONG
                    555: ScsiPortGetBusData(
                    556:     IN PVOID DeviceExtension,
                    557:     IN ULONG BusDataType,
                    558:     IN ULONG SystemIoBusNumber,
                    559:     IN ULONG SlotNumber,
                    560:     IN PVOID Buffer,
                    561:     IN ULONG Length
                    562:     );
                    563: 
                    564: PVOID
                    565: ScsiPortGetDeviceBase(
                    566:     IN PVOID HwDeviceExtension,
                    567:     IN INTERFACE_TYPE BusType,
                    568:     IN ULONG SystemIoBusNumber,
                    569:     IN SCSI_PHYSICAL_ADDRESS IoAddress,
                    570:     IN ULONG NumberOfBytes,
                    571:     IN BOOLEAN InIoSpace
                    572:     );
                    573: 
                    574: PVOID
                    575: ScsiPortGetLogicalUnit(
                    576:     IN PVOID HwDeviceExtension,
                    577:     IN UCHAR PathId,
                    578:     IN UCHAR TargetId,
                    579:     IN UCHAR Lun
                    580:     );
                    581: 
                    582: PSCSI_REQUEST_BLOCK
                    583: ScsiPortGetSrb(
                    584:     IN PVOID DeviceExtension,
                    585:     IN UCHAR PathId,
                    586:     IN UCHAR TargetId,
                    587:     IN UCHAR Lun,
                    588:     IN LONG QueueTag
                    589:     );
                    590: 
                    591: SCSI_PHYSICAL_ADDRESS
                    592: ScsiPortGetPhysicalAddress(
                    593:     IN PVOID HwDeviceExtension,
                    594:     IN PSCSI_REQUEST_BLOCK Srb,
                    595:     IN PVOID VirtualAddress,
                    596:     OUT ULONG *Length
                    597:     );
                    598: 
                    599: PVOID
                    600: ScsiPortGetVirtualAddress(
                    601:     IN PVOID HwDeviceExtension,
                    602:     IN SCSI_PHYSICAL_ADDRESS PhysicalAddress
                    603:     );
                    604: 
                    605: PVOID
                    606: ScsiPortGetUncachedExtension(
                    607:     IN PVOID HwDeviceExtension,
                    608:     IN PPORT_CONFIGURATION_INFORMATION ConfigInfo,
                    609:     IN ULONG NumberOfBytes
                    610:     );
                    611: 
                    612: VOID
                    613: ScsiPortFlushDma(
                    614:     IN PVOID DeviceExtension
                    615:     );
                    616: 
                    617: VOID
                    618: ScsiPortIoMapTransfer(
                    619:     IN PVOID HwDeviceExtension,
                    620:     IN PSCSI_REQUEST_BLOCK Srb,
                    621:     IN PVOID LogicalAddress,
                    622:     IN ULONG Length
                    623:     );
                    624: 
                    625: VOID
                    626: ScsiPortNotification(
                    627:     IN SCSI_NOTIFICATION_TYPE NotificationType,
                    628:     IN PVOID HwDeviceExtension,
                    629:     ...
                    630:     );
                    631: 
                    632: VOID
                    633: ScsiPortLogError(
                    634:     IN PVOID HwDeviceExtension,
                    635:     IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
                    636:     IN UCHAR PathId,
                    637:     IN UCHAR TargetId,
                    638:     IN UCHAR Lun,
                    639:     IN ULONG ErrorCode,
                    640:     IN ULONG UniqueId
                    641:     );
                    642: 
                    643: VOID
                    644: ScsiPortCompleteRequest(
                    645:     IN PVOID HwDeviceExtension,
                    646:     IN UCHAR PathId,
                    647:     IN UCHAR TargetId,
                    648:     IN UCHAR Lun,
                    649:     IN UCHAR SrbStatus
                    650:     );
                    651: 
                    652: VOID
                    653: ScsiPortMoveMemory(
                    654:     IN PVOID WriteBuffer,
                    655:     IN PVOID ReadBuffer,
                    656:     IN ULONG Length
                    657:     );
                    658: 
                    659: UCHAR
                    660: ScsiPortReadPortUchar(
                    661:     IN PUCHAR Port
                    662:     );
                    663: 
                    664: USHORT
                    665: ScsiPortReadPortUshort(
                    666:     IN PUSHORT Port
                    667:     );
                    668: 
                    669: ULONG
                    670: ScsiPortReadPortUlong(
                    671:     IN PULONG Port
                    672:     );
                    673: 
                    674: VOID
                    675: ScsiPortReadPortBufferUchar(
                    676:     IN PUCHAR Port,
                    677:     IN PUCHAR Buffer,
                    678:     IN ULONG  Count
                    679:     );
                    680: 
                    681: VOID
                    682: ScsiPortReadPortBufferUshort(
                    683:     IN PUSHORT Port,
                    684:     IN PUSHORT Buffer,
                    685:     IN ULONG Count
                    686:     );
                    687: 
                    688: VOID
                    689: ScsiPortReadPortBufferUlong(
                    690:     IN PULONG Port,
                    691:     IN PULONG Buffer,
                    692:     IN ULONG Count
                    693:     );
                    694: 
                    695: UCHAR
                    696: ScsiPortReadRegisterUchar(
                    697:     IN PUCHAR Register
                    698:     );
                    699: 
                    700: USHORT
                    701: ScsiPortReadRegisterUshort(
                    702:     IN PUSHORT Register
                    703:     );
                    704: 
                    705: ULONG
                    706: ScsiPortReadRegisterUlong(
                    707:     IN PULONG Register
                    708:     );
                    709: 
                    710: VOID
                    711: ScsiPortReadRegisterBufferUchar(
                    712:     IN PUCHAR Register,
                    713:     IN PUCHAR Buffer,
                    714:     IN ULONG  Count
                    715:     );
                    716: 
                    717: VOID
                    718: ScsiPortReadRegisterBufferUshort(
                    719:     IN PUSHORT Register,
                    720:     IN PUSHORT Buffer,
                    721:     IN ULONG Count
                    722:     );
                    723: 
                    724: VOID
                    725: ScsiPortStallExecution(
                    726:     IN ULONG Delay
                    727:     );
                    728: 
                    729: VOID
                    730: ScsiPortWritePortUchar(
                    731:     IN PUCHAR Port,
                    732:     IN UCHAR Value
                    733:     );
                    734: 
                    735: VOID
                    736: ScsiPortWritePortUshort(
                    737:     IN PUSHORT Port,
                    738:     IN USHORT Value
                    739:     );
                    740: 
                    741: VOID
                    742: ScsiPortWritePortUlong(
                    743:     IN PULONG Port,
                    744:     IN ULONG Value
                    745:     );
                    746: 
                    747: VOID
                    748: ScsiPortWritePortBufferUchar(
                    749:     IN PUCHAR Port,
                    750:     IN PUCHAR Buffer,
                    751:     IN ULONG  Count
                    752:     );
                    753: 
                    754: VOID
                    755: ScsiPortWritePortBufferUshort(
                    756:     IN PUSHORT Port,
                    757:     IN PUSHORT Buffer,
                    758:     IN ULONG Count
                    759:     );
                    760: 
                    761: VOID
                    762: ScsiPortWritePortBufferUlong(
                    763:     IN PULONG Port,
                    764:     IN PULONG Buffer,
                    765:     IN ULONG Count
                    766:     );
                    767: 
                    768: VOID
                    769: ScsiPortWriteRegisterUchar(
                    770:     IN PUCHAR Register,
                    771:     IN UCHAR Value
                    772:     );
                    773: 
                    774: VOID
                    775: ScsiPortWriteRegisterUshort(
                    776:     IN PUSHORT Register,
                    777:     IN USHORT Value
                    778:     );
                    779: 
                    780: VOID
                    781: ScsiPortWriteRegisterUlong(
                    782:     IN PULONG Register,
                    783:     IN ULONG Value
                    784:     );
                    785: 
                    786: VOID
                    787: ScsiPortWriteRegisterBufferUchar(
                    788:     IN PUCHAR Register,
                    789:     IN PUCHAR Buffer,
                    790:     IN ULONG  Count
                    791:     );
                    792: 
                    793: VOID
                    794: ScsiPortWriteRegisterBufferUshort(
                    795:     IN PUSHORT Register,
                    796:     IN PUSHORT Buffer,
                    797:     IN ULONG Count
                    798:     );
                    799: 
                    800: SCSI_PHYSICAL_ADDRESS
                    801: ScsiPortConvertUlongToPhysicalAddress(
                    802:     ULONG UlongAddress
                    803:     );
                    804: 
                    805: ULONG
                    806: ScsiPortConvertPhysicalAddressToUlong(
                    807:     SCSI_PHYSICAL_ADDRESS Address
                    808:     );
                    809: 
                    810: #define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart)
                    811: 
                    812: #ifdef DBG
                    813: 
                    814: VOID
                    815: ScsiDebugPrint(
                    816:     ULONG DebugPrintLevel,
                    817:     PCCHAR DebugMessage,
                    818:     ...
                    819:     );
                    820: 
                    821: #else
                    822: 
                    823: #define ScsiDebugPrint
                    824: 
                    825: #endif // DBG
                    826: 
                    827: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.