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  * scsi.h
00003  *
00004  * Interface between SCSI miniport drivers and the SCSI port driver.
00005  *
00006  * This file is part of the w32api package.
00007  *
00008  * Contributors:
00009  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
00010  *
00011  * THIS SOFTWARE IS NOT COPYRIGHTED
00012  *
00013  * This source code is offered for use in the public domain. You may
00014  * use, modify or distribute it freely.
00015  *
00016  * This code is distributed in the hope that it will be useful but
00017  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00018  * DISCLAIMED. This includes but is not limited to warranties of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00020  *
00021  */
00022 
00023 #ifndef _NTSRB_
00024 #define _NTSRB_
00025 
00026 #ifdef __cplusplus
00027 extern "C" {
00028 #endif
00029 
00030 #define SCSI_MAXIMUM_LOGICAL_UNITS        8
00031 #define SCSI_MAXIMUM_TARGETS_PER_BUS      128
00032 #define SCSI_MAXIMUM_LUNS_PER_TARGET      255
00033 #define SCSI_MAXIMUM_BUSES                8
00034 #define SCSI_MINIMUM_PHYSICAL_BREAKS      16
00035 #define SCSI_MAXIMUM_PHYSICAL_BREAKS      255
00036 #define SCSI_MAXIMUM_TARGETS              8
00037 
00038 /* PORT_CONFIGURATION_INFORMATION.Dma64BitAddresses constants */
00039 #define SCSI_DMA64_MINIPORT_SUPPORTED            0x01
00040 #define SCSI_DMA64_SYSTEM_SUPPORTED              0x80
00041 #if (NTDDI_VERSION > NTDDI_WS03SP1)
00042 #define SCSI_DMA64_MINIPORT_FULL64BIT_SUPPORTED  0x02
00043 #endif
00044 
00045 #define SP_UNINITIALIZED_VALUE            ((ULONG) ~0)
00046 #define SP_UNTAGGED                       ((UCHAR) ~0)
00047 
00048 /* Asynchronous events */
00049 #define SRBEV_BUS_RESET                   0x0001
00050 #define SRBEV_SCSI_ASYNC_NOTIFICATION     0x0002
00051 
00052 #define MAXIMUM_CDB_SIZE                  12
00053 
00054 #if DBG
00055 #define DebugPrint(x) ScsiDebugPrint x
00056 #else
00057 #define DebugPrint(x)
00058 #endif
00059 
00060 #define SCSI_COMBINE_BUS_TARGET(Bus, Target)(  \
00061   ((((UCHAR) (Target)) & ~(0x20 - 1)) << 8) |  \
00062   (((UCHAR) (Bus)) << 5) |                     \
00063   (((UCHAR) (Target)) & (0x20 - 1)))
00064 
00065 #define SCSI_DECODE_BUS_TARGET(Value, Bus, Target)( \
00066   Bus = (UCHAR) ((Value) >> 5),                     \
00067   Target = (UCHAR) ((((Value) >> 8) & ~(0x20 - 1)) | ((Value) & (0x20 - 1))))
00068 
00069 /* SCSI_REQUEST_BLOCK.Function constants */
00070 #define SRB_FUNCTION_EXECUTE_SCSI         0x00
00071 #define SRB_FUNCTION_CLAIM_DEVICE         0x01
00072 #define SRB_FUNCTION_IO_CONTROL           0x02
00073 #define SRB_FUNCTION_RECEIVE_EVENT        0x03
00074 #define SRB_FUNCTION_RELEASE_QUEUE        0x04
00075 #define SRB_FUNCTION_ATTACH_DEVICE        0x05
00076 #define SRB_FUNCTION_RELEASE_DEVICE       0x06
00077 #define SRB_FUNCTION_SHUTDOWN             0x07
00078 #define SRB_FUNCTION_FLUSH                0x08
00079 #define SRB_FUNCTION_ABORT_COMMAND        0x10
00080 #define SRB_FUNCTION_RELEASE_RECOVERY     0x11
00081 #define SRB_FUNCTION_RESET_BUS            0x12
00082 #define SRB_FUNCTION_RESET_DEVICE         0x13
00083 #define SRB_FUNCTION_TERMINATE_IO         0x14
00084 #define SRB_FUNCTION_FLUSH_QUEUE          0x15
00085 #define SRB_FUNCTION_REMOVE_DEVICE        0x16
00086 #define SRB_FUNCTION_WMI                  0x17
00087 #define SRB_FUNCTION_LOCK_QUEUE           0x18
00088 #define SRB_FUNCTION_UNLOCK_QUEUE         0x19
00089 #define SRB_FUNCTION_RESET_LOGICAL_UNIT   0x20
00090 #define SRB_FUNCTION_SET_LINK_TIMEOUT     0x21
00091 #define SRB_FUNCTION_LINK_TIMEOUT_OCCURRED 0x22
00092 #define SRB_FUNCTION_LINK_TIMEOUT_COMPLETE 0x23
00093 #define SRB_FUNCTION_POWER                0x24
00094 #define SRB_FUNCTION_PNP                  0x25
00095 #define SRB_FUNCTION_DUMP_POINTERS        0x26
00096 
00097 /* SCSI_REQUEST_BLOCK.SrbStatus constants */
00098 #define SRB_STATUS_PENDING                0x00
00099 #define SRB_STATUS_SUCCESS                0x01
00100 #define SRB_STATUS_ABORTED                0x02
00101 #define SRB_STATUS_ABORT_FAILED           0x03
00102 #define SRB_STATUS_ERROR                  0x04
00103 #define SRB_STATUS_BUSY                   0x05
00104 #define SRB_STATUS_INVALID_REQUEST        0x06
00105 #define SRB_STATUS_INVALID_PATH_ID        0x07
00106 #define SRB_STATUS_NO_DEVICE              0x08
00107 #define SRB_STATUS_TIMEOUT                0x09
00108 #define SRB_STATUS_SELECTION_TIMEOUT      0x0A
00109 #define SRB_STATUS_COMMAND_TIMEOUT        0x0B
00110 #define SRB_STATUS_MESSAGE_REJECTED       0x0D
00111 #define SRB_STATUS_BUS_RESET              0x0E
00112 #define SRB_STATUS_PARITY_ERROR           0x0F
00113 #define SRB_STATUS_REQUEST_SENSE_FAILED   0x10
00114 #define SRB_STATUS_NO_HBA                 0x11
00115 #define SRB_STATUS_DATA_OVERRUN           0x12
00116 #define SRB_STATUS_UNEXPECTED_BUS_FREE    0x13
00117 #define SRB_STATUS_PHASE_SEQUENCE_FAILURE 0x14
00118 #define SRB_STATUS_BAD_SRB_BLOCK_LENGTH   0x15
00119 #define SRB_STATUS_REQUEST_FLUSHED        0x16
00120 #define SRB_STATUS_INVALID_LUN            0x20
00121 #define SRB_STATUS_INVALID_TARGET_ID      0x21
00122 #define SRB_STATUS_BAD_FUNCTION           0x22
00123 #define SRB_STATUS_ERROR_RECOVERY         0x23
00124 #define SRB_STATUS_NOT_POWERED            0x24
00125 #define SRB_STATUS_LINK_DOWN              0x25
00126 #define SRB_STATUS_INTERNAL_ERROR         0x30
00127 
00128 #define SRB_STATUS_QUEUE_FROZEN           0x40
00129 #define SRB_STATUS_AUTOSENSE_VALID        0x80
00130 
00131 #define SRB_STATUS(Status) \
00132   (Status & ~(SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_QUEUE_FROZEN))
00133 
00134 /* SCSI_REQUEST_BLOCK.SrbFlags constants */
00135 #define SRB_FLAGS_QUEUE_ACTION_ENABLE       0x00000002
00136 #define SRB_FLAGS_DISABLE_DISCONNECT        0x00000004
00137 #define SRB_FLAGS_DISABLE_SYNCH_TRANSFER    0x00000008
00138 #define SRB_FLAGS_BYPASS_FROZEN_QUEUE       0x00000010
00139 #define SRB_FLAGS_DISABLE_AUTOSENSE         0x00000020
00140 #define SRB_FLAGS_DATA_IN                   0x00000040
00141 #define SRB_FLAGS_DATA_OUT                  0x00000080
00142 #define SRB_FLAGS_NO_DATA_TRANSFER          0x00000000
00143 #define SRB_FLAGS_UNSPECIFIED_DIRECTION     (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT)
00144 #define SRB_FLAGS_NO_QUEUE_FREEZE           0x00000100
00145 #define SRB_FLAGS_ADAPTER_CACHE_ENABLE      0x00000200
00146 #define SRB_FLAGS_FREE_SENSE_BUFFER         0x00000400
00147 #define SRB_FLAGS_IS_ACTIVE                 0x00010000
00148 #define SRB_FLAGS_ALLOCATED_FROM_ZONE       0x00020000
00149 #define SRB_FLAGS_SGLIST_FROM_POOL          0x00040000
00150 #define SRB_FLAGS_BYPASS_LOCKED_QUEUE       0x00080000
00151 #define SRB_FLAGS_NO_KEEP_AWAKE             0x00100000
00152 #define SRB_FLAGS_PORT_DRIVER_ALLOCSENSE    0x00200000
00153 #define SRB_FLAGS_PORT_DRIVER_SENSEHASPORT  0x00400000
00154 #define SRB_FLAGS_DONT_START_NEXT_PACKET    0x00800000
00155 #define SRB_FLAGS_PORT_DRIVER_RESERVED      0x0F000000
00156 #define SRB_FLAGS_CLASS_DRIVER_RESERVED     0xF0000000
00157 
00158 #if DBG
00159 #define SCSI_PORT_SIGNATURE                 0x54524f50
00160 #endif
00161 
00162 #define SRB_SIMPLE_TAG_REQUEST              0x20
00163 #define SRB_HEAD_OF_QUEUE_TAG_REQUEST       0x21
00164 #define SRB_ORDERED_QUEUE_TAG_REQUEST       0x22
00165 
00166 #define SRB_WMI_FLAGS_ADAPTER_REQUEST       0x0001
00167 #define SRB_POWER_FLAGS_ADAPTER_REQUEST     0x0001
00168 #define SRB_PNP_FLAGS_ADAPTER_REQUEST       0x0001
00169 
00170 #define SP_BUS_PARITY_ERROR                 0x0001
00171 #define SP_UNEXPECTED_DISCONNECT            0x0002
00172 #define SP_INVALID_RESELECTION              0x0003
00173 #define SP_BUS_TIME_OUT                     0x0004
00174 #define SP_PROTOCOL_ERROR                   0x0005
00175 #define SP_INTERNAL_ADAPTER_ERROR           0x0006
00176 #define SP_REQUEST_TIMEOUT                  0x0007
00177 #define SP_IRQ_NOT_RESPONDING               0x0008
00178 #define SP_BAD_FW_WARNING                   0x0009
00179 #define SP_BAD_FW_ERROR                     0x000a
00180 #define SP_LOST_WMI_MINIPORT_REQUEST        0x000b
00181 
00182 #define SP_VER_TRACE_SUPPORT                0x0010
00183 
00184 #define SP_RETURN_NOT_FOUND                 0
00185 #define SP_RETURN_FOUND                     1
00186 #define SP_RETURN_ERROR                     2
00187 #define SP_RETURN_BAD_CONFIG                3
00188 
00189 typedef PHYSICAL_ADDRESS SCSI_PHYSICAL_ADDRESS, *PSCSI_PHYSICAL_ADDRESS;
00190 
00191 typedef struct _ACCESS_RANGE {
00192   SCSI_PHYSICAL_ADDRESS RangeStart;
00193   ULONG RangeLength;
00194   BOOLEAN RangeInMemory;
00195 } ACCESS_RANGE, *PACCESS_RANGE;
00196 
00197 typedef struct _PORT_CONFIGURATION_INFORMATION {
00198   ULONG Length;
00199   ULONG SystemIoBusNumber;
00200   INTERFACE_TYPE AdapterInterfaceType;
00201   ULONG BusInterruptLevel;
00202   ULONG BusInterruptVector;
00203   KINTERRUPT_MODE InterruptMode;
00204   ULONG MaximumTransferLength;
00205   ULONG NumberOfPhysicalBreaks;
00206   ULONG DmaChannel;
00207   ULONG DmaPort;
00208   DMA_WIDTH DmaWidth;
00209   DMA_SPEED DmaSpeed;
00210   ULONG AlignmentMask;
00211   ULONG NumberOfAccessRanges;
00212   ACCESS_RANGE (*AccessRanges)[];
00213   PVOID Reserved;
00214   UCHAR NumberOfBuses;
00215   UCHAR InitiatorBusId[8];
00216   BOOLEAN ScatterGather;
00217   BOOLEAN Master;
00218   BOOLEAN CachesData;
00219   BOOLEAN AdapterScansDown;
00220   BOOLEAN AtdiskPrimaryClaimed;
00221   BOOLEAN AtdiskSecondaryClaimed;
00222   BOOLEAN Dma32BitAddresses;
00223   BOOLEAN DemandMode;
00224   BOOLEAN MapBuffers;
00225   BOOLEAN NeedPhysicalAddresses;
00226   BOOLEAN TaggedQueuing;
00227   BOOLEAN AutoRequestSense;
00228   BOOLEAN MultipleRequestPerLu;
00229   BOOLEAN ReceiveEvent;
00230   BOOLEAN RealModeInitialized;
00231   BOOLEAN BufferAccessScsiPortControlled;
00232   UCHAR MaximumNumberOfTargets;
00233   UCHAR ReservedUchars[2];
00234   ULONG SlotNumber;
00235   ULONG BusInterruptLevel2;
00236   ULONG BusInterruptVector2;
00237   KINTERRUPT_MODE InterruptMode2;
00238   ULONG DmaChannel2;
00239   ULONG DmaPort2;
00240   DMA_WIDTH DmaWidth2;
00241   DMA_SPEED DmaSpeed2;
00242   ULONG DeviceExtensionSize;
00243   ULONG SpecificLuExtensionSize;
00244   ULONG SrbExtensionSize;
00245   UCHAR Dma64BitAddresses;
00246   BOOLEAN ResetTargetSupported;
00247   UCHAR MaximumNumberOfLogicalUnits;
00248   BOOLEAN WmiDataProvider;
00249 } PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
00250 
00251 #define CONFIG_INFO_VERSION_2 sizeof(PORT_CONFIGURATION_INFORMATION)
00252 
00253 #ifdef __GNUC__
00254 __extension__ /* enums limited to range of integer */
00255 #endif
00256 typedef enum _SCSI_ADAPTER_CONTROL_TYPE {
00257   ScsiQuerySupportedControlTypes = 0,
00258   ScsiStopAdapter,
00259   ScsiRestartAdapter,
00260   ScsiSetBootConfig,
00261   ScsiSetRunningConfig,
00262   ScsiAdapterControlMax,
00263   MakeAdapterControlTypeSizeOfUlong = 0xffffffff
00264 } SCSI_ADAPTER_CONTROL_TYPE, *PSCSI_ADAPTER_CONTROL_TYPE;
00265 
00266 typedef enum _SCSI_ADAPTER_CONTROL_STATUS {
00267   ScsiAdapterControlSuccess = 0,
00268   ScsiAdapterControlUnsuccessful
00269 } SCSI_ADAPTER_CONTROL_STATUS, *PSCSI_ADAPTER_CONTROL_STATUS;
00270 
00271 typedef struct _SCSI_SUPPORTED_CONTROL_TYPE_LIST {
00272   ULONG MaxControlType;
00273   BOOLEAN SupportedTypeList[0];
00274 } SCSI_SUPPORTED_CONTROL_TYPE_LIST, *PSCSI_SUPPORTED_CONTROL_TYPE_LIST;
00275 
00276 typedef struct _SCSI_REQUEST_BLOCK {
00277   USHORT Length;
00278   UCHAR Function;
00279   UCHAR SrbStatus;
00280   UCHAR ScsiStatus;
00281   UCHAR PathId;
00282   UCHAR TargetId;
00283   UCHAR Lun;
00284   UCHAR QueueTag;
00285   UCHAR QueueAction;
00286   UCHAR CdbLength;
00287   UCHAR SenseInfoBufferLength;
00288   ULONG SrbFlags;
00289   ULONG DataTransferLength;
00290   ULONG TimeOutValue;
00291   PVOID DataBuffer;
00292   PVOID SenseInfoBuffer;
00293   struct _SCSI_REQUEST_BLOCK *NextSrb;
00294   PVOID OriginalRequest;
00295   PVOID SrbExtension;
00296   _ANONYMOUS_UNION union {
00297     ULONG InternalStatus;
00298     ULONG QueueSortKey;
00299     ULONG LinkTimeoutValue;
00300   } DUMMYUNIONNAME;
00301 #if defined(_WIN64)
00302   ULONG Reserved;
00303 #endif
00304   UCHAR Cdb[16];
00305 } SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK;
00306 
00307 #define SCSI_REQUEST_BLOCK_SIZE           sizeof(SCSI_REQUEST_BLOCK)
00308 
00309 typedef struct _SCSI_WMI_REQUEST_BLOCK {
00310   USHORT Length;
00311   UCHAR Function;
00312   UCHAR SrbStatus;
00313   UCHAR WMISubFunction;
00314   UCHAR PathId;
00315   UCHAR TargetId;
00316   UCHAR Lun;
00317   UCHAR Reserved1;
00318   UCHAR WMIFlags;
00319   UCHAR Reserved2[2];
00320   ULONG SrbFlags;
00321   ULONG DataTransferLength;
00322   ULONG TimeOutValue;
00323   PVOID DataBuffer;
00324   PVOID DataPath;
00325   PVOID Reserved3;
00326   PVOID OriginalRequest;
00327   PVOID SrbExtension;
00328   ULONG Reserved4;
00329 #if (NTDDI_VERSION >= NTDDI_WS03SP1) && defined(_WIN64)
00330   ULONG Reserved6;
00331 #endif
00332   UCHAR Reserved5[16];
00333 } SCSI_WMI_REQUEST_BLOCK, *PSCSI_WMI_REQUEST_BLOCK;
00334 
00335 typedef enum _STOR_DEVICE_POWER_STATE {
00336   StorPowerDeviceUnspecified = 0,
00337   StorPowerDeviceD0,
00338   StorPowerDeviceD1,
00339   StorPowerDeviceD2,
00340   StorPowerDeviceD3,
00341   StorPowerDeviceMaximum
00342 } STOR_DEVICE_POWER_STATE, *PSTOR_DEVICE_POWER_STATE;
00343 
00344 typedef enum _STOR_POWER_ACTION {
00345   StorPowerActionNone = 0,
00346   StorPowerActionReserved,
00347   StorPowerActionSleep,
00348   StorPowerActionHibernate,
00349   StorPowerActionShutdown,
00350   StorPowerActionShutdownReset,
00351   StorPowerActionShutdownOff,
00352   StorPowerActionWarmEject
00353 } STOR_POWER_ACTION, *PSTOR_POWER_ACTION;
00354 
00355 typedef struct _SCSI_POWER_REQUEST_BLOCK {
00356   USHORT Length;
00357   UCHAR Function;
00358   UCHAR SrbStatus;
00359   UCHAR SrbPowerFlags;
00360   UCHAR PathId;
00361   UCHAR TargetId;
00362   UCHAR Lun;
00363   STOR_DEVICE_POWER_STATE DevicePowerState;
00364   ULONG SrbFlags;
00365   ULONG DataTransferLength;
00366   ULONG TimeOutValue;
00367   PVOID DataBuffer;
00368   PVOID SenseInfoBuffer;
00369   struct _SCSI_REQUEST_BLOCK *NextSrb;
00370   PVOID OriginalRequest;
00371   PVOID SrbExtension;
00372   STOR_POWER_ACTION PowerAction;
00373 #if defined(_WIN64)
00374   ULONG Reserved;
00375 #endif
00376   UCHAR Reserved5[16];
00377 } SCSI_POWER_REQUEST_BLOCK, *PSCSI_POWER_REQUEST_BLOCK;
00378 
00379 typedef enum _STOR_PNP_ACTION {
00380   StorStartDevice = 0x0,
00381   StorRemoveDevice = 0x2,
00382   StorStopDevice  = 0x4,
00383   StorQueryCapabilities = 0x9,
00384   StorQueryResourceRequirements = 0xB,
00385   StorFilterResourceRequirements = 0xD,
00386   StorSurpriseRemoval = 0x17
00387 } STOR_PNP_ACTION, *PSTOR_PNP_ACTION;
00388 
00389 typedef struct _STOR_DEVICE_CAPABILITIES {
00390   USHORT Version;
00391   ULONG DeviceD1:1;
00392   ULONG DeviceD2:1;
00393   ULONG LockSupported:1;
00394   ULONG EjectSupported:1;
00395   ULONG Removable:1;
00396   ULONG DockDevice:1;
00397   ULONG UniqueID:1;
00398   ULONG SilentInstall:1;
00399   ULONG SurpriseRemovalOK:1;
00400   ULONG NoDisplayInUI:1;
00401 } STOR_DEVICE_CAPABILITIES, *PSTOR_DEVICE_CAPABILITIES;
00402 
00403 typedef struct _SCSI_PNP_REQUEST_BLOCK {
00404   USHORT Length;
00405   UCHAR Function;
00406   UCHAR SrbStatus;
00407   UCHAR PnPSubFunction;
00408   UCHAR PathId;
00409   UCHAR TargetId;
00410   UCHAR Lun;
00411   STOR_PNP_ACTION PnPAction;
00412   ULONG SrbFlags;
00413   ULONG DataTransferLength;
00414   ULONG TimeOutValue;
00415   PVOID DataBuffer;
00416   PVOID SenseInfoBuffer;
00417   struct _SCSI_REQUEST_BLOCK *NextSrb;
00418   PVOID OriginalRequest;
00419   PVOID SrbExtension;
00420   ULONG SrbPnPFlags;
00421 #if defined(_WIN64)
00422   ULONG Reserved;
00423 #endif
00424   UCHAR Reserved4[16];
00425 } SCSI_PNP_REQUEST_BLOCK, *PSCSI_PNP_REQUEST_BLOCK;
00426 
00427 typedef BOOLEAN
00428 (NTAPI *PHW_INITIALIZE)(
00429   IN PVOID DeviceExtension);
00430 
00431 typedef BOOLEAN
00432 (NTAPI *PHW_STARTIO)(
00433   IN PVOID DeviceExtension,
00434   IN PSCSI_REQUEST_BLOCK Srb);
00435 
00436 typedef BOOLEAN
00437 (NTAPI *PHW_INTERRUPT)(
00438   IN PVOID DeviceExtension);
00439 
00440 typedef VOID
00441 (NTAPI *PHW_TIMER)(
00442   IN PVOID DeviceExtension);
00443 
00444 typedef VOID
00445 (NTAPI *PHW_DMA_STARTED)(
00446   IN PVOID DeviceExtension);
00447 
00448 typedef ULONG
00449 (NTAPI *PHW_FIND_ADAPTER)(
00450   IN PVOID DeviceExtension,
00451   IN PVOID HwContext,
00452   IN PVOID BusInformation,
00453   IN PCHAR ArgumentString,
00454   IN OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo,
00455   OUT PBOOLEAN Again);
00456 
00457 typedef BOOLEAN
00458 (NTAPI *PHW_RESET_BUS)(
00459   IN PVOID DeviceExtension,
00460   IN ULONG PathId);
00461 
00462 typedef BOOLEAN
00463 (NTAPI *PHW_ADAPTER_STATE)(
00464   IN PVOID DeviceExtension,
00465   IN PVOID Context,
00466   IN BOOLEAN SaveState);
00467 
00468 typedef SCSI_ADAPTER_CONTROL_STATUS
00469 (NTAPI *PHW_ADAPTER_CONTROL)(
00470   IN PVOID DeviceExtension,
00471   IN SCSI_ADAPTER_CONTROL_TYPE ControlType,
00472   IN PVOID Parameters);
00473 
00474 typedef enum _SCSI_NOTIFICATION_TYPE {
00475   RequestComplete,
00476   NextRequest,
00477   NextLuRequest,
00478   ResetDetected,
00479   CallDisableInterrupts,
00480   CallEnableInterrupts,
00481   RequestTimerCall,
00482   BusChangeDetected,
00483   WMIEvent,
00484   WMIReregister,
00485   LinkUp,
00486   LinkDown,
00487   QueryTickCount,
00488   BufferOverrunDetected,
00489   TraceNotification
00490 } SCSI_NOTIFICATION_TYPE, *PSCSI_NOTIFICATION_TYPE;
00491 
00492 typedef struct _HW_INITIALIZATION_DATA {
00493   ULONG HwInitializationDataSize;
00494   INTERFACE_TYPE  AdapterInterfaceType;
00495   PHW_INITIALIZE HwInitialize;
00496   PHW_STARTIO HwStartIo;
00497   PHW_INTERRUPT HwInterrupt;
00498   PHW_FIND_ADAPTER HwFindAdapter;
00499   PHW_RESET_BUS HwResetBus;
00500   PHW_DMA_STARTED HwDmaStarted;
00501   PHW_ADAPTER_STATE HwAdapterState;
00502   ULONG DeviceExtensionSize;
00503   ULONG SpecificLuExtensionSize;
00504   ULONG SrbExtensionSize;
00505   ULONG NumberOfAccessRanges;
00506   PVOID Reserved;
00507   BOOLEAN MapBuffers;
00508   BOOLEAN NeedPhysicalAddresses;
00509   BOOLEAN TaggedQueuing;
00510   BOOLEAN AutoRequestSense;
00511   BOOLEAN MultipleRequestPerLu;
00512   BOOLEAN ReceiveEvent;
00513   USHORT VendorIdLength;
00514   PVOID VendorId;
00515   _ANONYMOUS_UNION union {
00516     USHORT ReservedUshort;
00517     USHORT PortVersionFlags;
00518   } DUMMYUNIONNAME;
00519   USHORT DeviceIdLength;
00520   PVOID DeviceId;
00521   PHW_ADAPTER_CONTROL HwAdapterControl;
00522 } HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
00523 
00524 #if defined(_NTDDK_)
00525 #define SCSIPORTAPI
00526 #else
00527 #define SCSIPORTAPI DECLSPEC_IMPORT
00528 #endif
00529 
00530 SCSIPORTAPI
00531 VOID
00532 NTAPI
00533 ScsiPortCompleteRequest(
00534   IN PVOID HwDeviceExtension,
00535   IN UCHAR PathId,
00536   IN UCHAR TargetId,
00537   IN UCHAR Lun,
00538   IN UCHAR SrbStatus);
00539 
00540 SCSIPORTAPI
00541 ULONG
00542 NTAPI
00543 ScsiPortConvertPhysicalAddressToUlong(
00544   IN SCSI_PHYSICAL_ADDRESS Address);
00545 
00546 #define ScsiPortConvertPhysicalAddressToUlong(Address) ((Address).LowPart)
00547 #define ScsiPortConvertPhysicalAddressToULongPtr(Address) ((ULONG_PTR)((Address).QuadPart))
00548 
00549 SCSIPORTAPI
00550 SCSI_PHYSICAL_ADDRESS
00551 NTAPI
00552 ScsiPortConvertUlongToPhysicalAddress(
00553   IN ULONG_PTR UlongAddress);
00554 
00555 SCSIPORTAPI
00556 VOID
00557 NTAPI
00558 ScsiPortFlushDma(
00559   IN PVOID DeviceExtension);
00560 
00561 SCSIPORTAPI
00562 VOID
00563 NTAPI
00564 ScsiPortFreeDeviceBase(
00565   IN PVOID HwDeviceExtension,
00566   IN PVOID MappedAddress);
00567 
00568 SCSIPORTAPI
00569 ULONG
00570 NTAPI
00571 ScsiPortGetBusData(
00572   IN PVOID DeviceExtension,
00573   IN ULONG BusDataType,
00574   IN ULONG SystemIoBusNumber,
00575   IN ULONG SlotNumber,
00576   IN PVOID Buffer,
00577   IN ULONG Length);
00578 
00579 SCSIPORTAPI
00580 PVOID
00581 NTAPI
00582 ScsiPortGetDeviceBase(
00583   IN PVOID HwDeviceExtension,
00584   IN INTERFACE_TYPE BusType,
00585   IN ULONG SystemIoBusNumber,
00586   IN SCSI_PHYSICAL_ADDRESS IoAddress,
00587   IN ULONG NumberOfBytes,
00588   IN BOOLEAN InIoSpace);
00589 
00590 SCSIPORTAPI
00591 PVOID
00592 NTAPI
00593 ScsiPortGetLogicalUnit(
00594   IN PVOID HwDeviceExtension,
00595   IN UCHAR PathId,
00596   IN UCHAR TargetId,
00597   IN UCHAR Lun);
00598 
00599 SCSIPORTAPI
00600 SCSI_PHYSICAL_ADDRESS
00601 NTAPI
00602 ScsiPortGetPhysicalAddress(
00603   IN PVOID HwDeviceExtension,
00604   IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
00605   IN PVOID VirtualAddress,
00606   OUT ULONG *Length);
00607 
00608 SCSIPORTAPI
00609 PSCSI_REQUEST_BLOCK
00610 NTAPI
00611 ScsiPortGetSrb(
00612   IN PVOID DeviceExtension,
00613   IN UCHAR PathId,
00614   IN UCHAR TargetId,
00615   IN UCHAR Lun,
00616   IN LONG QueueTag);
00617 
00618 SCSIPORTAPI
00619 PVOID
00620 NTAPI
00621 ScsiPortGetUncachedExtension(
00622   IN PVOID HwDeviceExtension,
00623   IN PPORT_CONFIGURATION_INFORMATION ConfigInfo,
00624   IN ULONG NumberOfBytes);
00625 
00626 SCSIPORTAPI
00627 PVOID
00628 NTAPI
00629 ScsiPortGetVirtualAddress(
00630   IN PVOID HwDeviceExtension,
00631   IN SCSI_PHYSICAL_ADDRESS PhysicalAddress);
00632 
00633 SCSIPORTAPI
00634 ULONG
00635 NTAPI
00636 ScsiPortInitialize(
00637   IN PVOID Argument1,
00638   IN PVOID Argument2,
00639   IN struct _HW_INITIALIZATION_DATA *HwInitializationData,
00640   IN PVOID HwContext OPTIONAL);
00641 
00642 SCSIPORTAPI
00643 VOID
00644 NTAPI
00645 ScsiPortIoMapTransfer(
00646   IN PVOID HwDeviceExtension,
00647   IN PSCSI_REQUEST_BLOCK Srb,
00648   IN PVOID LogicalAddress,
00649   IN ULONG Length);
00650 
00651 SCSIPORTAPI
00652 VOID
00653 NTAPI
00654 ScsiPortLogError(
00655   IN PVOID HwDeviceExtension,
00656   IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
00657   IN UCHAR PathId,
00658   IN UCHAR TargetId,
00659   IN UCHAR Lun,
00660   IN ULONG ErrorCode,
00661   IN ULONG UniqueId);
00662 
00663 SCSIPORTAPI
00664 VOID
00665 __cdecl
00666 ScsiPortNotification(
00667   IN SCSI_NOTIFICATION_TYPE NotificationType,
00668   IN PVOID HwDeviceExtension,
00669   IN ...);
00670 
00671 SCSIPORTAPI
00672 VOID
00673 NTAPI
00674 ScsiPortQuerySystemTime(
00675   OUT PLARGE_INTEGER CurrentTime);
00676 
00677 SCSIPORTAPI
00678 ULONG
00679 NTAPI
00680 ScsiPortSetBusDataByOffset(
00681   IN PVOID DeviceExtension,
00682   IN ULONG BusDataType,
00683   IN ULONG SystemIoBusNumber,
00684   IN ULONG SlotNumber,
00685   IN PVOID Buffer,
00686   IN ULONG Offset,
00687   IN ULONG Length);
00688 
00689 SCSIPORTAPI
00690 VOID
00691 NTAPI
00692 ScsiPortStallExecution(
00693   IN ULONG Delay);
00694 
00695 SCSIPORTAPI
00696 BOOLEAN
00697 NTAPI
00698 ScsiPortValidateRange(
00699   IN PVOID HwDeviceExtension,
00700   IN INTERFACE_TYPE BusType,
00701   IN ULONG SystemIoBusNumber,
00702   IN SCSI_PHYSICAL_ADDRESS IoAddress,
00703   IN ULONG NumberOfBytes,
00704   IN BOOLEAN InIoSpace);
00705 
00706 SCSIPORTAPI
00707 VOID
00708 __cdecl
00709 ScsiDebugPrint(
00710   IN ULONG DebugPrintLevel,
00711   IN PCCHAR DebugMessage,
00712   IN ...);
00713 
00714 #if defined(_M_AMD64)
00715 
00716 #define ScsiPortReadPortUchar READ_PORT_UCHAR
00717 #define ScsiPortReadPortUshort READ_PORT_USHORT
00718 #define ScsiPortReadPortUlong READ_PORT_ULONG
00719 
00720 #define ScsiPortReadPortBufferUchar READ_PORT_BUFFER_UCHAR
00721 #define ScsiPortReadPortBufferUshort READ_PORT_BUFFER_USHORT
00722 #define ScsiPortReadPortBufferUlong READ_PORT_BUFFER_ULONG
00723 
00724 #define ScsiPortReadRegisterUchar READ_REGISTER_UCHAR
00725 #define ScsiPortReadRegisterUshort READ_REGISTER_USHORT
00726 #define ScsiPortReadRegisterUlong READ_REGISTER_ULONG
00727 
00728 #define ScsiPortReadRegisterBufferUchar READ_REGISTER_BUFFER_UCHAR
00729 #define ScsiPortReadRegisterBufferUshort READ_REGISTER_BUFFER_USHORT
00730 #define ScsiPortReadRegisterBufferUlong READ_REGISTER_BUFFER_ULONG
00731 
00732 #define ScsiPortWritePortUchar WRITE_PORT_UCHAR
00733 #define ScsiPortWritePortUshort WRITE_PORT_USHORT
00734 #define ScsiPortWritePortUlong WRITE_PORT_ULONG
00735 
00736 #define ScsiPortWritePortBufferUchar WRITE_PORT_BUFFER_UCHAR
00737 #define ScsiPortWritePortBufferUshort WRITE_PORT_BUFFER_USHORT
00738 #define ScsiPortWritePortBufferUlong WRITE_PORT_BUFFER_ULONG
00739 
00740 #define ScsiPortWriteRegisterUchar WRITE_REGISTER_UCHAR
00741 #define ScsiPortWriteRegisterUshort WRITE_REGISTER_USHORT
00742 #define ScsiPortWriteRegisterUlong WRITE_REGISTER_ULONG
00743 
00744 #define ScsiPortWriteRegisterBufferUchar WRITE_REGISTER_BUFFER_UCHAR
00745 #define ScsiPortWriteRegisterBufferUshort WRITE_REGISTER_BUFFER_USHORT
00746 #define ScsiPortWriteRegisterBufferUlong WRITE_REGISTER_BUFFER_ULONG
00747 
00748 #define ScsiPortMoveMemory memmove
00749 
00750 #else
00751 
00752 SCSIPORTAPI
00753 UCHAR
00754 NTAPI
00755 ScsiPortReadPortUchar(
00756   IN PUCHAR Port);
00757 
00758 SCSIPORTAPI
00759 ULONG
00760 NTAPI
00761 ScsiPortReadPortUlong(
00762   IN PULONG Port);
00763 
00764 SCSIPORTAPI
00765 USHORT
00766 NTAPI
00767 ScsiPortReadPortUshort(
00768   IN PUSHORT Port);
00769 
00770 SCSIPORTAPI
00771 VOID
00772 NTAPI
00773 ScsiPortReadPortBufferUchar(
00774   IN PUCHAR Port,
00775   IN PUCHAR Buffer,
00776   IN ULONG Count);
00777 
00778 SCSIPORTAPI
00779 VOID
00780 NTAPI
00781 ScsiPortReadPortBufferUlong(
00782   IN PULONG Port,
00783   IN PULONG Buffer,
00784   IN ULONG Count);
00785 
00786 SCSIPORTAPI
00787 VOID
00788 NTAPI
00789 ScsiPortReadPortBufferUshort(
00790   IN PUSHORT Port,
00791   IN PUSHORT Buffer,
00792   IN ULONG Count);
00793 
00794 SCSIPORTAPI
00795 UCHAR
00796 NTAPI
00797 ScsiPortReadRegisterUchar(
00798   IN PUCHAR Register);
00799 
00800 SCSIPORTAPI
00801 ULONG
00802 NTAPI
00803 ScsiPortReadRegisterUlong(
00804   IN PULONG Register);
00805 
00806 SCSIPORTAPI
00807 USHORT
00808 NTAPI
00809 ScsiPortReadRegisterUshort(
00810   IN PUSHORT Register);
00811 
00812 SCSIPORTAPI
00813 VOID
00814 NTAPI
00815 ScsiPortReadRegisterBufferUchar(
00816   IN PUCHAR Register,
00817   IN PUCHAR Buffer,
00818   IN ULONG Count);
00819 
00820 SCSIPORTAPI
00821 VOID
00822 NTAPI
00823 ScsiPortReadRegisterBufferUlong(
00824   IN PULONG Register,
00825   IN PULONG Buffer,
00826   IN ULONG Count);
00827 
00828 SCSIPORTAPI
00829 VOID
00830 NTAPI
00831 ScsiPortReadRegisterBufferUshort(
00832   IN PUSHORT Register,
00833   IN PUSHORT Buffer,
00834   IN ULONG Count);
00835 
00836 SCSIPORTAPI
00837 VOID
00838 NTAPI
00839 ScsiPortWritePortUchar(
00840   IN PUCHAR Port,
00841   IN UCHAR Value);
00842 
00843 SCSIPORTAPI
00844 VOID
00845 NTAPI
00846 ScsiPortWritePortUlong(
00847   IN PULONG Port,
00848   IN ULONG Value);
00849 
00850 SCSIPORTAPI
00851 VOID
00852 NTAPI
00853 ScsiPortWritePortUshort(
00854   IN PUSHORT Port,
00855   IN USHORT Value);
00856 
00857 SCSIPORTAPI
00858 VOID
00859 NTAPI
00860 ScsiPortWritePortBufferUchar(
00861   IN PUCHAR Port,
00862   IN PUCHAR Buffer,
00863   IN ULONG Count);
00864 
00865 SCSIPORTAPI
00866 VOID
00867 NTAPI
00868 ScsiPortWritePortBufferUlong(
00869   IN PULONG Port,
00870   IN PULONG Buffer,
00871   IN ULONG Count);
00872 
00873 SCSIPORTAPI
00874 VOID
00875 NTAPI
00876 ScsiPortWritePortBufferUshort(
00877   IN PUSHORT Port,
00878   IN PUSHORT Buffer,
00879   IN ULONG Count);
00880 
00881 SCSIPORTAPI
00882 VOID
00883 NTAPI
00884 ScsiPortWriteRegisterUchar(
00885   IN PUCHAR Register,
00886   IN UCHAR Value);
00887 
00888 SCSIPORTAPI
00889 VOID
00890 NTAPI
00891 ScsiPortWriteRegisterUlong(
00892   IN PULONG Register,
00893   IN ULONG Value);
00894 
00895 SCSIPORTAPI
00896 VOID
00897 NTAPI
00898 ScsiPortWriteRegisterUshort(
00899   IN PUSHORT Register,
00900   IN USHORT Value);
00901 
00902 SCSIPORTAPI
00903 VOID
00904 NTAPI
00905 ScsiPortWriteRegisterBufferUchar(
00906   IN PUCHAR Register,
00907   IN PUCHAR Buffer,
00908   IN ULONG Count);
00909 
00910 SCSIPORTAPI
00911 VOID
00912 NTAPI
00913 ScsiPortWriteRegisterBufferUlong(
00914   IN PULONG Register,
00915   IN PULONG Buffer,
00916   IN ULONG Count);
00917 
00918 SCSIPORTAPI
00919 VOID
00920 NTAPI
00921 ScsiPortWriteRegisterBufferUshort(
00922   IN PUSHORT Register,
00923   IN PUSHORT Buffer,
00924   IN ULONG Count);
00925 
00926 SCSIPORTAPI
00927 VOID
00928 NTAPI
00929 ScsiPortMoveMemory(
00930   IN PVOID WriteBuffer,
00931   IN PVOID ReadBuffer,
00932   IN ULONG Length);
00933 
00934 #endif /* defined(_M_AMD64) */
00935 
00936 #ifdef __cplusplus
00937 }
00938 #endif
00939 
00940 #endif /* _NTSRB_ */

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.