Annotation of ntddk/src/scsi/inc/srb.h, revision 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.