ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

srb.h
Go to the documentation of this file.
00001 /*
00002     Module Name:
00003 
00004     srb.h
00005 
00006     Abstract:
00007 
00008     This file defines the interface between SCSI mini-port drivers and the
00009     SCSI port driver.  It is also used by SCSI class drivers to talk to the
00010     SCSI port driver.
00011     w2k-related definitions are added by Alter from w2k/xp DDK
00012  */
00013 
00014 #ifndef _NTSRB_
00015 #define _NTSRB_
00016 
00017 // Define SCSI maximum configuration parameters.
00018 
00019 #define SCSI_MAXIMUM_LOGICAL_UNITS 8
00020 #define SCSI_MAXIMUM_TARGETS_PER_BUS 128
00021 #define SCSI_MAXIMUM_LUNS_PER_TARGET 255
00022 #define SCSI_MAXIMUM_BUSES 8
00023 #define SCSI_MINIMUM_PHYSICAL_BREAKS  16
00024 #define SCSI_MAXIMUM_PHYSICAL_BREAKS 255
00025 
00026 // This constant is for backward compatibility.
00027 // This use to be the maximum number of targets supported.
00028 
00029 #define SCSI_MAXIMUM_TARGETS 8
00030 // begin_ntminitape
00031 #define MAXIMUM_CDB_SIZE 12
00032 // end_ntminitape
00033 
00034 #ifndef USER_MODE
00035 
00036 typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
00037 
00038 typedef struct _ACCESS_RANGE {
00039     SCSI_PHYSICAL_ADDRESS RangeStart;
00040     ULONG RangeLength;
00041     BOOLEAN RangeInMemory;
00042 }ACCESS_RANGE, *PACCESS_RANGE;
00043 
00044 //
00045 // Configuration information structure.  Contains the information necessary
00046 // to initialize the adapter. NOTE: This structure's must be a multiple of
00047 // quadwords.
00048 //
00049 
00050 typedef struct _PORT_CONFIGURATION_INFORMATION {
00051     ULONG Length;               // Length of port configuation information strucuture.
00052     ULONG SystemIoBusNumber;    // IO bus number (0 for machines that have only 1 IO bus
00053     INTERFACE_TYPE  AdapterInterfaceType;   // EISA, MCA or ISA
00054     ULONG BusInterruptLevel;    // Interrupt request level for device
00055     // Bus interrupt vector used with hardware buses which use as vector as
00056     // well as level, such as internal buses.
00057     ULONG BusInterruptVector;
00058     KINTERRUPT_MODE InterruptMode;  // Interrupt mode (level-sensitive or edge-triggered)
00059     
00060     ULONG MaximumTransferLength;    // Max bytes that can be transferred in a single SRB
00061     ULONG NumberOfPhysicalBreaks;   // Number of contiguous blocks of physical memory
00062     ULONG DmaChannel;               // DMA channel for devices using system DMA
00063     ULONG DmaPort;
00064     DMA_WIDTH DmaWidth;
00065     DMA_SPEED DmaSpeed;
00066     ULONG AlignmentMask;            // Alignment masked for the adapter for data transfers.
00067     ULONG NumberOfAccessRanges;     // Number of allocated access range elements.
00068     ACCESS_RANGE (*AccessRanges)[]; // Pointer to array of access range elements.
00069     PVOID Reserved;
00070     UCHAR NumberOfBuses;            // Number of SCSI buses attached to the adapter.
00071     CCHAR InitiatorBusId[8];        // SCSI bus ID for adapter
00072     BOOLEAN ScatterGather;          // Indicates that the adapter does scatter/gather
00073     BOOLEAN Master;                 // Indicates that the adapter is a bus master
00074     BOOLEAN CachesData;             // Host caches data or state.
00075     BOOLEAN AdapterScansDown;       // Host adapter scans down for bios devices.
00076     BOOLEAN AtdiskPrimaryClaimed;   // Primary at disk address (0x1F0) claimed.
00077     BOOLEAN AtdiskSecondaryClaimed; // Secondary at disk address (0x170) claimed.
00078     BOOLEAN Dma32BitAddresses;      // The master uses 32-bit DMA addresses.
00079     BOOLEAN DemandMode;             // Use Demand Mode DMA rather than Single Request.
00080     BOOLEAN MapBuffers;             // Data buffers must be mapped into virtual address space.
00081     BOOLEAN NeedPhysicalAddresses;  // We need to tranlate virtual to physical addresses.
00082     BOOLEAN TaggedQueuing;          // Supports tagged queuing
00083     BOOLEAN AutoRequestSense;       // Supports auto request sense.
00084     BOOLEAN MultipleRequestPerLu;   // Supports multiple requests per logical unit.
00085     BOOLEAN ReceiveEvent;           // Support receive event function.
00086     BOOLEAN RealModeInitialized;    // Indicates the real-mode driver has initialized the card.
00087     
00088     BOOLEAN BufferAccessScsiPortControlled; // Indicate that the miniport will not touch 
00089                                     // the data buffers directly.
00090     UCHAR   MaximumNumberOfTargets; // Indicator for wide scsi.
00091     UCHAR   ReservedUchars[2];      // Ensure quadword alignment.
00092     ULONG SlotNumber;               // Adapter slot number
00093     ULONG BusInterruptLevel2;       // Interrupt information for a second IRQ.
00094     ULONG BusInterruptVector2;
00095     KINTERRUPT_MODE InterruptMode2;
00096     ULONG DmaChannel2;              // DMA information for a second channel.
00097     ULONG DmaPort2;
00098     DMA_WIDTH DmaWidth2;
00099     DMA_SPEED DmaSpeed2;
00100 
00101 } PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
00102 
00103 typedef struct _PORT_CONFIGURATION_INFORMATION_NT {
00104     // Fields added to allow for the miniport
00105     // to update these sizes based on requirements
00106     // for large transfers ( > 64K);
00107     ULONG DeviceExtensionSize;
00108     ULONG SpecificLuExtensionSize;
00109     ULONG SrbExtensionSize;
00110 } PORT_CONFIGURATION_INFORMATION_NT, *PPORT_CONFIGURATION_INFORMATION_NT;
00111 
00112 typedef struct _PORT_CONFIGURATION_INFORMATION_2K {
00113     // Used to determine whether the system and/or the miniport support 
00114     // 64-bit physical addresses.  See SCSI_DMA64_* flags below.
00115     UCHAR  Dma64BitAddresses;
00116     // Indicates that the miniport can accept a SRB_FUNCTION_RESET_DEVICE
00117     // to clear all requests to a particular LUN.
00118     BOOLEAN ResetTargetSupported;
00119     // Indicates that the miniport can support more than 8 logical units per
00120     // target (maximum LUN number is one less than this field).
00121     UCHAR MaximumNumberOfLogicalUnits;
00122     // Supports WMI?
00123     BOOLEAN WmiDataProvider;
00124 } PORT_CONFIGURATION_INFORMATION_2K, *PPORT_CONFIGURATION_INFORMATION_2K;
00125 
00126 typedef struct _PORT_CONFIGURATION_INFORMATION_COMMON {
00127     PORT_CONFIGURATION_INFORMATION     comm;
00128     PORT_CONFIGURATION_INFORMATION_NT  nt4;
00129     PORT_CONFIGURATION_INFORMATION_2K  w2k;
00130 } PORT_CONFIGURATION_INFORMATION_COMMON, *PPORT_CONFIGURATION_INFORMATION_COMMON;
00131 
00132 //
00133 // Version control for ConfigInfo structure.
00134 //
00135 
00136 #define CONFIG_INFO_VERSION_2 sizeof(PORT_CONFIGURATION_INFORMATION)
00137 
00138 //
00139 // Flags for controlling 64-bit DMA use (PORT_CONFIGURATION_INFORMATION field
00140 // Dma64BitAddresses)
00141 //
00142 
00143 //
00144 // Set by scsiport on entering HwFindAdapter if the system can support 64-bit 
00145 // physical addresses.  The miniport can use this information before calling 
00146 // ScsiPortGetUncachedExtension to modify the DeviceExtensionSize, 
00147 // SpecificLuExtensionSize & SrbExtensionSize fields to account for the extra
00148 // size of the scatter gather list.
00149 //
00150 
00151 #define SCSI_DMA64_SYSTEM_SUPPORTED     0x80
00152 
00153 //
00154 // Set by the miniport before calling ScsiPortGetUncachedExtension to indicate
00155 // that scsiport should provide it with 64-bit physical addresses.  If the 
00156 // system does not support 64-bit PA's then this bit will be ignored.
00157 //
00158 
00159 #define SCSI_DMA64_MINIPORT_SUPPORTED   0x01
00160 
00161 
00162 //
00163 // Command type (and parameter) definition(s) for AdapterControl requests.
00164 //
00165 
00166 typedef enum _SCSI_ADAPTER_CONTROL_TYPE {
00167     ScsiQuerySupportedControlTypes = 0,
00168     ScsiStopAdapter,
00169     ScsiRestartAdapter,
00170     ScsiSetBootConfig,
00171     ScsiSetRunningConfig,
00172     ScsiAdapterControlMax,
00173     MakeAdapterControlTypeSizeOfUlong = 0xffffffff
00174 } SCSI_ADAPTER_CONTROL_TYPE, *PSCSI_ADAPTER_CONTROL_TYPE;
00175 
00176 //
00177 // Adapter control status values
00178 //
00179 
00180 typedef enum _SCSI_ADAPTER_CONTROL_STATUS {
00181     ScsiAdapterControlSuccess = 0,
00182     ScsiAdapterControlUnsuccessful
00183 } SCSI_ADAPTER_CONTROL_STATUS, *PSCSI_ADAPTER_CONTROL_STATUS;
00184 
00185 //
00186 // Parameters for Adapter Control Functions:
00187 //
00188 
00189 //
00190 // ScsiQuerySupportedControlTypes:
00191 //
00192 
00193 #ifdef _MSC_VER
00194 #pragma warning(disable:4200)
00195 #endif
00196 typedef struct _SCSI_SUPPORTED_CONTROL_TYPE_LIST {
00197 
00198     //
00199     // Specifies the number of entries in the adapter control type list.
00200     //
00201 
00202     IN ULONG MaxControlType;
00203 
00204     //
00205     // The miniport will set TRUE for each control type it supports.
00206     // The number of entries in this array is defined by MaxAdapterControlType
00207     // - the miniport must not attempt to set any AC types beyond the maximum
00208     // value specified.
00209     //
00210 
00211     OUT BOOLEAN SupportedTypeList[0];
00212 
00213 } SCSI_SUPPORTED_CONTROL_TYPE_LIST, *PSCSI_SUPPORTED_CONTROL_TYPE_LIST;
00214 #ifdef _MSC_VER
00215 #pragma warning(disable:4200)
00216 #endif
00217 
00218 //
00219 // Uninitialized flag value.
00220 //
00221 
00222 #define SP_UNINITIALIZED_VALUE ((ULONG) ~0)
00223 #define SP_UNTAGGED ((UCHAR) ~0)
00224 
00225 //
00226 // Set asynchronous events.
00227 //
00228 
00229 #define SRBEV_BUS_RESET               0x0001
00230 #define SRBEV_SCSI_ASYNC_NOTIFICATION 0x0002
00231 
00232 // begin_ntminitape
00233 
00234 //
00235 // SCSI I/O Request Block
00236 //
00237 
00238 typedef struct _SCSI_REQUEST_BLOCK {
00239     USHORT Length;                  // offset 0
00240     UCHAR Function;                 // offset 2
00241     UCHAR SrbStatus;                // offset 3
00242     UCHAR ScsiStatus;               // offset 4
00243     UCHAR PathId;                   // offset 5
00244     UCHAR TargetId;                 // offset 6
00245     UCHAR Lun;                      // offset 7
00246     UCHAR QueueTag;                 // offset 8
00247     UCHAR QueueAction;              // offset 9
00248     UCHAR CdbLength;                // offset a
00249     UCHAR SenseInfoBufferLength;    // offset b
00250     ULONG SrbFlags;                 // offset c
00251     ULONG DataTransferLength;       // offset 10
00252     ULONG TimeOutValue;             // offset 14
00253     PVOID DataBuffer;               // offset 18
00254     PVOID SenseInfoBuffer;          // offset 1c
00255     struct _SCSI_REQUEST_BLOCK *NextSrb; // offset 20
00256     PVOID OriginalRequest;          // offset 24
00257     PVOID SrbExtension;             // offset 28
00258     union {
00259         ULONG InternalStatus;       // offset 2c
00260         ULONG QueueSortKey;         // offset 2c
00261     };
00262 
00263 #if defined(_WIN64)
00264     // Force PVOID alignment of Cdb
00265     ULONG Reserved;
00266 
00267 #endif
00268 
00269     UCHAR Cdb[16];                  // offset 30
00270 } SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK;
00271 
00272 #define SCSI_REQUEST_BLOCK_SIZE sizeof(SCSI_REQUEST_BLOCK)
00273 
00274 //
00275 // SCSI I/O Request Block for WMI Requests
00276 //
00277 
00278 typedef struct _SCSI_WMI_REQUEST_BLOCK {
00279     USHORT Length;
00280     UCHAR Function;        // SRB_FUNCTION_WMI
00281     UCHAR SrbStatus;
00282     UCHAR WMISubFunction;
00283     UCHAR PathId;          // If SRB_WMI_FLAGS_ADAPTER_REQUEST is set in
00284     UCHAR TargetId;        // WMIFlags then PathId, TargetId and Lun are
00285     UCHAR Lun;             // reserved fields.
00286     UCHAR Reserved1;
00287     UCHAR WMIFlags;
00288     UCHAR Reserved2[2];
00289     ULONG SrbFlags;
00290     ULONG DataTransferLength;
00291     ULONG TimeOutValue;
00292     PVOID DataBuffer;
00293     PVOID DataPath;
00294     PVOID Reserved3;
00295     PVOID OriginalRequest;
00296     PVOID SrbExtension;
00297     ULONG Reserved4;
00298     UCHAR Reserved5[16];
00299 } SCSI_WMI_REQUEST_BLOCK, *PSCSI_WMI_REQUEST_BLOCK;
00300 
00301 //
00302 // SRB Functions
00303 //
00304 
00305 #define SRB_FUNCTION_EXECUTE_SCSI           0x00
00306 #define SRB_FUNCTION_CLAIM_DEVICE           0x01
00307 #define SRB_FUNCTION_IO_CONTROL             0x02
00308 #define SRB_FUNCTION_RECEIVE_EVENT          0x03
00309 #define SRB_FUNCTION_RELEASE_QUEUE          0x04
00310 #define SRB_FUNCTION_ATTACH_DEVICE          0x05
00311 #define SRB_FUNCTION_RELEASE_DEVICE         0x06
00312 #define SRB_FUNCTION_SHUTDOWN               0x07
00313 #define SRB_FUNCTION_FLUSH                  0x08
00314 #define SRB_FUNCTION_ABORT_COMMAND          0x10
00315 #define SRB_FUNCTION_RELEASE_RECOVERY       0x11
00316 #define SRB_FUNCTION_RESET_BUS              0x12
00317 #define SRB_FUNCTION_RESET_DEVICE           0x13
00318 #define SRB_FUNCTION_TERMINATE_IO           0x14
00319 #define SRB_FUNCTION_FLUSH_QUEUE            0x15
00320 #define SRB_FUNCTION_REMOVE_DEVICE          0x16
00321 #define SRB_FUNCTION_WMI                    0x17
00322 #define SRB_FUNCTION_LOCK_QUEUE             0x18
00323 #define SRB_FUNCTION_UNLOCK_QUEUE           0x19
00324 #define SRB_FUNCTION_RESET_LOGICAL_UNIT     0x20
00325 
00326 //
00327 // SRB Status
00328 //
00329 
00330 #define SRB_STATUS_PENDING                  0x00
00331 #define SRB_STATUS_SUCCESS                  0x01
00332 #define SRB_STATUS_ABORTED                  0x02
00333 #define SRB_STATUS_ABORT_FAILED             0x03
00334 #define SRB_STATUS_ERROR                    0x04
00335 #define SRB_STATUS_BUSY                     0x05
00336 #define SRB_STATUS_INVALID_REQUEST          0x06
00337 #define SRB_STATUS_INVALID_PATH_ID          0x07
00338 #define SRB_STATUS_NO_DEVICE                0x08
00339 #define SRB_STATUS_TIMEOUT                  0x09
00340 #define SRB_STATUS_SELECTION_TIMEOUT        0x0A
00341 #define SRB_STATUS_COMMAND_TIMEOUT          0x0B
00342 #define SRB_STATUS_MESSAGE_REJECTED         0x0D
00343 #define SRB_STATUS_BUS_RESET                0x0E
00344 #define SRB_STATUS_PARITY_ERROR             0x0F
00345 #define SRB_STATUS_REQUEST_SENSE_FAILED     0x10
00346 #define SRB_STATUS_NO_HBA                   0x11
00347 #define SRB_STATUS_DATA_OVERRUN             0x12
00348 #define SRB_STATUS_UNEXPECTED_BUS_FREE      0x13
00349 #define SRB_STATUS_PHASE_SEQUENCE_FAILURE   0x14
00350 #define SRB_STATUS_BAD_SRB_BLOCK_LENGTH     0x15
00351 #define SRB_STATUS_REQUEST_FLUSHED          0x16
00352 #define SRB_STATUS_INVALID_LUN              0x20
00353 #define SRB_STATUS_INVALID_TARGET_ID        0x21
00354 #define SRB_STATUS_BAD_FUNCTION             0x22
00355 #define SRB_STATUS_ERROR_RECOVERY           0x23
00356 #define SRB_STATUS_NOT_POWERED              0x24
00357 
00358 //
00359 // This value is used by the port driver to indicate that a non-scsi-related
00360 // error occured.  Miniports must never return this status.
00361 //
00362 
00363 #define SRB_STATUS_INTERNAL_ERROR           0x30
00364 
00365 //
00366 // Srb status values 0x38 through 0x3f are reserved for internal port driver 
00367 // use.
00368 // 
00369 
00370 
00371 
00372 //
00373 // SRB Status Masks
00374 //
00375 
00376 #define SRB_STATUS_QUEUE_FROZEN             0x40
00377 #define SRB_STATUS_AUTOSENSE_VALID          0x80
00378 
00379 #define SRB_STATUS(Status) (Status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN))
00380 
00381 //
00382 // SRB Flag Bits
00383 //
00384 
00385 #define SRB_FLAGS_QUEUE_ACTION_ENABLE       0x00000002
00386 #define SRB_FLAGS_DISABLE_DISCONNECT        0x00000004
00387 #define SRB_FLAGS_DISABLE_SYNCH_TRANSFER    0x00000008
00388 #define SRB_FLAGS_BYPASS_FROZEN_QUEUE       0x00000010
00389 #define SRB_FLAGS_DISABLE_AUTOSENSE         0x00000020
00390 #define SRB_FLAGS_DATA_IN                   0x00000040
00391 #define SRB_FLAGS_DATA_OUT                  0x00000080
00392 #define SRB_FLAGS_NO_DATA_TRANSFER          0x00000000
00393 #define SRB_FLAGS_UNSPECIFIED_DIRECTION      (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT)
00394 #define SRB_FLAGS_NO_QUEUE_FREEZE           0x00000100
00395 #define SRB_FLAGS_ADAPTER_CACHE_ENABLE      0x00000200
00396 #define SRB_FLAGS_FREE_SENSE_BUFFER         0x00000400
00397 #define SRB_FLAGS_IS_ACTIVE                 0x00010000
00398 #define SRB_FLAGS_ALLOCATED_FROM_ZONE       0x00020000
00399 #define SRB_FLAGS_SGLIST_FROM_POOL          0x00040000
00400 #define SRB_FLAGS_BYPASS_LOCKED_QUEUE       0x00080000
00401 
00402 #define SRB_FLAGS_NO_KEEP_AWAKE             0x00100000
00403 #define SRB_FLAGS_PORT_DRIVER_ALLOCSENSE    0x00200000
00404 #define SRB_FLAGS_PORT_DRIVER_SENSEHASPORT  0x00400000
00405 #define SRB_FLAGS_DONT_START_NEXT_PACKET    0x00800000
00406 
00407 #define SRB_FLAGS_PORT_DRIVER_RESERVED      0x0F000000
00408 #define SRB_FLAGS_CLASS_DRIVER_RESERVED     0xF0000000
00409 //
00410 // Queue Action
00411 //
00412 
00413 #define SRB_SIMPLE_TAG_REQUEST              0x20
00414 #define SRB_HEAD_OF_QUEUE_TAG_REQUEST       0x21
00415 #define SRB_ORDERED_QUEUE_TAG_REQUEST       0x22
00416 
00417 #define SRB_WMI_FLAGS_ADAPTER_REQUEST       0x01
00418 
00419 // end_ntminitape
00420 
00421 //
00422 // SCSI Adapter Dependent Routines
00423 //
00424 
00425 typedef
00426 BOOLEAN
00427 (NTAPI *PHW_INITIALIZE) (
00428     IN PVOID DeviceExtension
00429     );
00430 
00431 typedef
00432 BOOLEAN
00433 (NTAPI *PHW_STARTIO) (
00434     IN PVOID DeviceExtension,
00435     IN PSCSI_REQUEST_BLOCK Srb
00436     );
00437 
00438 typedef
00439 BOOLEAN
00440 (NTAPI *PHW_INTERRUPT) (
00441     IN PVOID DeviceExtension
00442     );
00443 
00444 typedef
00445 VOID
00446 (NTAPI *PHW_TIMER) (
00447     IN PVOID DeviceExtension
00448     );
00449 
00450 typedef
00451 VOID
00452 (NTAPI *PHW_DMA_STARTED) (
00453     IN PVOID DeviceExtension
00454     );
00455 
00456 typedef
00457 ULONG
00458 (NTAPI *PHW_FIND_ADAPTER) (
00459     IN PVOID DeviceExtension,
00460     IN PVOID HwContext,
00461     IN PVOID BusInformation,
00462     IN PCHAR ArgumentString,
00463     IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo,
00464     OUT PBOOLEAN Again
00465     );
00466 
00467 typedef
00468 BOOLEAN
00469 (NTAPI *PHW_RESET_BUS) (
00470     IN PVOID DeviceExtension,
00471     IN ULONG PathId
00472     );
00473 
00474 typedef
00475 BOOLEAN
00476 (NTAPI *PHW_ADAPTER_STATE) (
00477     IN PVOID DeviceExtension,
00478     IN PVOID Context,
00479     IN BOOLEAN SaveState
00480     );
00481 
00482 typedef
00483 SCSI_ADAPTER_CONTROL_STATUS
00484 (NTAPI *PHW_ADAPTER_CONTROL) (
00485     IN PVOID DeviceExtension,
00486     IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
00487     IN PVOID Parameters
00488     );
00489 
00490 //
00491 // Port driver error codes
00492 //
00493 
00494 #define SP_BUS_PARITY_ERROR         0x0001
00495 #define SP_UNEXPECTED_DISCONNECT    0x0002
00496 #define SP_INVALID_RESELECTION      0x0003
00497 #define SP_BUS_TIME_OUT             0x0004
00498 #define SP_PROTOCOL_ERROR           0x0005
00499 #define SP_INTERNAL_ADAPTER_ERROR   0x0006
00500 #define SP_REQUEST_TIMEOUT          0x0007
00501 #define SP_IRQ_NOT_RESPONDING       0x0008
00502 #define SP_BAD_FW_WARNING           0x0009
00503 #define SP_BAD_FW_ERROR             0x000a
00504 #define SP_LOST_WMI_MINIPORT_REQUEST 0x000b
00505 
00506 
00507 //
00508 // Return values for SCSI_HW_FIND_ADAPTER.
00509 //
00510 
00511 #define SP_RETURN_NOT_FOUND     0
00512 #define SP_RETURN_FOUND         1
00513 #define SP_RETURN_ERROR         2
00514 #define SP_RETURN_BAD_CONFIG    3
00515 
00516 //
00517 // Notification Event Types
00518 //
00519 
00520 typedef enum _SCSI_NOTIFICATION_TYPE {
00521     RequestComplete,
00522     NextRequest,
00523     NextLuRequest,
00524     ResetDetected,
00525     CallDisableInterrupts,
00526     CallEnableInterrupts,
00527     RequestTimerCall,
00528     BusChangeDetected,     /* New */
00529     WMIEvent,
00530     WMIReregister
00531 } SCSI_NOTIFICATION_TYPE, *PSCSI_NOTIFICATION_TYPE;
00532 
00533 //
00534 // Structure passed between miniport initialization
00535 // and SCSI port initialization
00536 //
00537 
00538 typedef struct _HW_INITIALIZATION_DATA {
00539 
00540     ULONG HwInitializationDataSize;
00541     // Adapter interface type:
00542     //
00543     // Internal
00544     // Isa
00545     // Eisa
00546     // MicroChannel
00547     // TurboChannel
00548     // PCIBus
00549     // VMEBus
00550     // NuBus
00551     // PCMCIABus
00552     // CBus
00553     // MPIBus
00554     // MPSABus
00555     INTERFACE_TYPE  AdapterInterfaceType;
00556     // Miniport driver routines
00557     PHW_INITIALIZE HwInitialize;
00558     PHW_STARTIO HwStartIo;
00559     PHW_INTERRUPT HwInterrupt;
00560     PHW_FIND_ADAPTER HwFindAdapter;
00561     PHW_RESET_BUS HwResetBus;
00562     PHW_DMA_STARTED HwDmaStarted;
00563     PHW_ADAPTER_STATE HwAdapterState;
00564     ULONG DeviceExtensionSize;
00565     ULONG SpecificLuExtensionSize;
00566     ULONG SrbExtensionSize;
00567     ULONG NumberOfAccessRanges;
00568     PVOID Reserved;
00569     
00570     BOOLEAN MapBuffers;             // Data buffers must be mapped into virtual address space.
00571     BOOLEAN NeedPhysicalAddresses;  // We need to tranlate virtual to physical addresses.
00572     BOOLEAN TaggedQueuing;          // Supports tagged queuing
00573     BOOLEAN AutoRequestSense;       // Supports auto request sense.
00574     BOOLEAN MultipleRequestPerLu;   // Supports multiple requests per logical unit.
00575     BOOLEAN ReceiveEvent;           // Support receive event function.
00576     USHORT VendorIdLength;          // Vendor identification length
00577     PVOID VendorId;                 // Vendor identification
00578     USHORT ReservedUshort;          // Pad for alignment and future use.
00579     USHORT DeviceIdLength;          // Device identification length
00580     PVOID DeviceId;                 // Device identification
00581 
00582 } HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
00583 
00584 typedef struct _HW_INITIALIZATION_DATA_2K {
00585     // Stop adapter routine.
00586     PHW_ADAPTER_CONTROL HwAdapterControl;
00587 
00588 } HW_INITIALIZATION_DATA_2K, *PHW_INITIALIZATION_DATA_2K;
00589 
00590 typedef struct _HW_INITIALIZATION_DATA_COMMON {
00591   HW_INITIALIZATION_DATA      comm;
00592   HW_INITIALIZATION_DATA_2K   w2k;
00593 }HW_INITIALIZATION_DATA_COMMON, *PHW_INITIALIZATION_DATA_COMMON;
00594 
00595 // begin_ntminitape
00596 
00597 #ifndef _NTDDK_
00598 #define SCSIPORT_API DECLSPEC_IMPORT
00599 #else
00600 #define SCSIPORT_API
00601 #endif
00602 
00603 // end_ntminitape
00604 
00605 //
00606 // Port driver routines called by miniport driver
00607 //
00608 
00609 SCSIPORT_API
00610 ULONG NTAPI
00611 ScsiPortInitialize(
00612     IN PVOID Argument1,
00613     IN PVOID Argument2,
00614     IN struct _HW_INITIALIZATION_DATA *HwInitializationData,
00615     IN PVOID HwContext
00616     );
00617 
00618 SCSIPORT_API
00619 VOID NTAPI
00620 ScsiPortFreeDeviceBase(
00621     IN PVOID HwDeviceExtension,
00622     IN PVOID MappedAddress
00623     );
00624 
00625 SCSIPORT_API
00626 ULONG NTAPI
00627 ScsiPortGetBusData(
00628     IN PVOID DeviceExtension,
00629     IN ULONG BusDataType,
00630     IN ULONG SystemIoBusNumber,
00631     IN ULONG SlotNumber,
00632     IN PVOID Buffer,
00633     IN ULONG Length
00634     );
00635 
00636 SCSIPORT_API
00637 ULONG NTAPI
00638 ScsiPortSetBusDataByOffset(
00639     IN PVOID DeviceExtension,
00640     IN ULONG BusDataType,
00641     IN ULONG SystemIoBusNumber,
00642     IN ULONG SlotNumber,
00643     IN PVOID Buffer,
00644     IN ULONG Offset,
00645     IN ULONG Length
00646     );
00647 
00648 SCSIPORT_API
00649 PVOID NTAPI
00650 ScsiPortGetDeviceBase(
00651     IN PVOID HwDeviceExtension,
00652     IN INTERFACE_TYPE BusType,
00653     IN ULONG SystemIoBusNumber,
00654     IN SCSI_PHYSICAL_ADDRESS IoAddress,
00655     IN ULONG NumberOfBytes,
00656     IN BOOLEAN InIoSpace
00657     );
00658 
00659 SCSIPORT_API
00660 PVOID NTAPI
00661 ScsiPortGetLogicalUnit(
00662     IN PVOID HwDeviceExtension,
00663     IN UCHAR PathId,
00664     IN UCHAR TargetId,
00665     IN UCHAR Lun
00666     );
00667 
00668 SCSIPORT_API
00669 PSCSI_REQUEST_BLOCK NTAPI
00670 ScsiPortGetSrb(
00671     IN PVOID DeviceExtension,
00672     IN UCHAR PathId,
00673     IN UCHAR TargetId,
00674     IN UCHAR Lun,
00675     IN LONG QueueTag
00676     );
00677 
00678 SCSIPORT_API
00679 SCSI_PHYSICAL_ADDRESS NTAPI
00680 ScsiPortGetPhysicalAddress(
00681     IN PVOID HwDeviceExtension,
00682     IN PSCSI_REQUEST_BLOCK Srb,
00683     IN PVOID VirtualAddress,
00684     OUT ULONG *Length
00685     );
00686 
00687 SCSIPORT_API
00688 PVOID NTAPI
00689 ScsiPortGetVirtualAddress(
00690     IN PVOID HwDeviceExtension,
00691     IN SCSI_PHYSICAL_ADDRESS PhysicalAddress
00692     );
00693 
00694 SCSIPORT_API
00695 PVOID NTAPI
00696 ScsiPortGetUncachedExtension(
00697     IN PVOID HwDeviceExtension,
00698     IN PPORT_CONFIGURATION_INFORMATION ConfigInfo,
00699     IN ULONG NumberOfBytes
00700     );
00701 
00702 SCSIPORT_API
00703 VOID NTAPI
00704 ScsiPortFlushDma(
00705     IN PVOID DeviceExtension
00706     );
00707 
00708 SCSIPORT_API
00709 VOID NTAPI
00710 ScsiPortIoMapTransfer(
00711     IN PVOID HwDeviceExtension,
00712     IN PSCSI_REQUEST_BLOCK Srb,
00713     IN PVOID LogicalAddress,
00714     IN ULONG Length
00715     );
00716 
00717 SCSIPORT_API
00718 VOID __cdecl
00719 ScsiPortNotification(
00720     IN SCSI_NOTIFICATION_TYPE NotificationType,
00721     IN PVOID HwDeviceExtension,
00722     ...
00723     );
00724 
00725 SCSIPORT_API
00726 VOID NTAPI
00727 ScsiPortLogError(
00728     IN PVOID HwDeviceExtension,
00729     IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
00730     IN UCHAR PathId,
00731     IN UCHAR TargetId,
00732     IN UCHAR Lun,
00733     IN ULONG ErrorCode,
00734     IN ULONG UniqueId
00735     );
00736 
00737 SCSIPORT_API
00738 VOID NTAPI
00739 ScsiPortCompleteRequest(
00740     IN PVOID HwDeviceExtension,
00741     IN UCHAR PathId,
00742     IN UCHAR TargetId,
00743     IN UCHAR Lun,
00744     IN UCHAR SrbStatus
00745     );
00746 
00747 SCSIPORT_API
00748 VOID NTAPI
00749 ScsiPortMoveMemory(
00750     IN PVOID WriteBuffer,
00751     IN PVOID ReadBuffer,
00752     IN ULONG Length
00753     );
00754 
00755 SCSIPORT_API
00756 UCHAR NTAPI
00757 ScsiPortReadPortUchar(
00758     IN PUCHAR Port
00759     );
00760 
00761 SCSIPORT_API
00762 USHORT NTAPI
00763 ScsiPortReadPortUshort(
00764     IN PUSHORT Port
00765     );
00766 
00767 SCSIPORT_API
00768 ULONG NTAPI
00769 ScsiPortReadPortUlong(
00770     IN PULONG Port
00771     );
00772 
00773 SCSIPORT_API
00774 VOID NTAPI
00775 ScsiPortReadPortBufferUchar(
00776     IN PUCHAR Port,
00777     IN PUCHAR Buffer,
00778     IN ULONG  Count
00779     );
00780 
00781 SCSIPORT_API
00782 VOID NTAPI
00783 ScsiPortReadPortBufferUshort(
00784     IN PUSHORT Port,
00785     IN PUSHORT Buffer,
00786     IN ULONG Count
00787     );
00788 
00789 SCSIPORT_API
00790 VOID NTAPI
00791 ScsiPortReadPortBufferUlong(
00792     IN PULONG Port,
00793     IN PULONG Buffer,
00794     IN ULONG Count
00795     );
00796 
00797 SCSIPORT_API
00798 UCHAR NTAPI
00799 ScsiPortReadRegisterUchar(
00800     IN PUCHAR Register
00801     );
00802 
00803 SCSIPORT_API
00804 USHORT NTAPI
00805 ScsiPortReadRegisterUshort(
00806     IN PUSHORT Register
00807     );
00808 
00809 SCSIPORT_API
00810 ULONG NTAPI
00811 ScsiPortReadRegisterUlong(
00812     IN PULONG Register
00813     );
00814 
00815 SCSIPORT_API
00816 VOID NTAPI
00817 ScsiPortReadRegisterBufferUchar(
00818     IN PUCHAR Register,
00819     IN PUCHAR Buffer,
00820     IN ULONG  Count
00821     );
00822 
00823 SCSIPORT_API
00824 VOID NTAPI
00825 ScsiPortReadRegisterBufferUshort(
00826     IN PUSHORT Register,
00827     IN PUSHORT Buffer,
00828     IN ULONG Count
00829     );
00830 
00831 SCSIPORT_API
00832 VOID NTAPI
00833 ScsiPortReadRegisterBufferUlong(
00834     IN PULONG Register,
00835     IN PULONG Buffer,
00836     IN ULONG Count
00837     );
00838 
00839 SCSIPORT_API
00840 VOID NTAPI
00841 ScsiPortStallExecution(
00842     IN ULONG Delay
00843     );
00844 
00845 SCSIPORT_API
00846 VOID NTAPI
00847 ScsiPortWritePortUchar(
00848     IN PUCHAR Port,
00849     IN UCHAR Value
00850     );
00851 
00852 SCSIPORT_API
00853 VOID NTAPI
00854 ScsiPortWritePortUshort(
00855     IN PUSHORT Port,
00856     IN USHORT Value
00857     );
00858 
00859 SCSIPORT_API
00860 VOID NTAPI
00861 ScsiPortWritePortUlong(
00862     IN PULONG Port,
00863     IN ULONG Value
00864     );
00865 
00866 SCSIPORT_API
00867 VOID NTAPI
00868 ScsiPortWritePortBufferUchar(
00869     IN PUCHAR Port,
00870     IN PUCHAR Buffer,
00871     IN ULONG  Count
00872     );
00873 
00874 SCSIPORT_API
00875 VOID NTAPI
00876 ScsiPortWritePortBufferUshort(
00877     IN PUSHORT Port,
00878     IN PUSHORT Buffer,
00879     IN ULONG Count
00880     );
00881 
00882 SCSIPORT_API
00883 VOID NTAPI
00884 ScsiPortWritePortBufferUlong(
00885     IN PULONG Port,
00886     IN PULONG Buffer,
00887     IN ULONG Count
00888     );
00889 
00890 SCSIPORT_API
00891 VOID NTAPI
00892 ScsiPortWriteRegisterUchar(
00893     IN PUCHAR Register,
00894     IN UCHAR Value
00895     );
00896 
00897 SCSIPORT_API
00898 VOID NTAPI
00899 ScsiPortWriteRegisterUshort(
00900     IN PUSHORT Register,
00901     IN USHORT Value
00902     );
00903 
00904 SCSIPORT_API
00905 VOID NTAPI
00906 ScsiPortWriteRegisterUlong(
00907     IN PULONG Register,
00908     IN ULONG Value
00909     );
00910 
00911 SCSIPORT_API
00912 VOID NTAPI
00913 ScsiPortWriteRegisterBufferUchar(
00914     IN PUCHAR Register,
00915     IN PUCHAR Buffer,
00916     IN ULONG  Count
00917     );
00918 
00919 SCSIPORT_API
00920 VOID NTAPI
00921 ScsiPortWriteRegisterBufferUshort(
00922     IN PUSHORT Register,
00923     IN PUSHORT Buffer,
00924     IN ULONG Count
00925     );
00926 
00927 SCSIPORT_API
00928 VOID NTAPI
00929 ScsiPortWriteRegisterBufferUlong(
00930     IN PULONG Register,
00931     IN PULONG Buffer,
00932     IN ULONG Count
00933     );
00934 
00935 SCSIPORT_API
00936 SCSI_PHYSICAL_ADDRESS NTAPI
00937 ScsiPortConvertUlongToPhysicalAddress(
00938     ULONG UlongAddress
00939     );
00940 
00941 SCSIPORT_API
00942 ULONG NTAPI
00943 ScsiPortConvertPhysicalAddressToUlong(
00944     SCSI_PHYSICAL_ADDRESS Address
00945     );
00946 
00947 #define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart)
00948 
00949 SCSIPORT_API
00950 BOOLEAN NTAPI
00951 ScsiPortValidateRange(
00952     IN PVOID HwDeviceExtension,
00953     IN INTERFACE_TYPE BusType,
00954     IN ULONG SystemIoBusNumber,
00955     IN SCSI_PHYSICAL_ADDRESS IoAddress,
00956     IN ULONG NumberOfBytes,
00957     IN BOOLEAN InIoSpace
00958     );
00959 
00960 // begin_ntminitape
00961 
00962 SCSIPORT_API
00963 VOID __cdecl
00964 ScsiDebugPrint(
00965     ULONG DebugPrintLevel,
00966     PCCHAR DebugMessage,
00967     ...
00968     );
00969 
00970 // end_ntminitape
00971 
00972 #endif //USER_MODE
00973 
00974 #endif //

Generated on Sat May 26 2012 04:27:00 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.