Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygensrb.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
1.7.6.1
|