Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenuata_ctl.h
Go to the documentation of this file.
00001 /*++ 00002 00003 Copyright (c) 2004-2005 Alexandr A. Telyatnikov (Alter) 00004 00005 Module Name: 00006 uata_ctl.h 00007 00008 Abstract: 00009 This header contains definitions for private UniATA SRB_IOCTL. 00010 00011 Author: 00012 Alexander A. Telyatnikov (Alter) 00013 00014 Environment: 00015 kernel mode only 00016 00017 Notes: 00018 00019 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 00020 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00021 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 00022 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 00023 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 00024 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00025 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00026 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00027 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 00028 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00029 00030 Revision History: 00031 00032 --*/ 00033 00034 #ifndef __UNIATA_IO_CONTROL_CODES__H__ 00035 #define __UNIATA_IO_CONTROL_CODES__H__ 00036 00037 //#include "scsi.h" 00038 00039 #pragma pack(push, 8) 00040 00041 #ifdef __cplusplus 00042 extern "C" { 00043 #endif //__cplusplus 00044 00045 #define AHCI_MAX_PORT 32 00046 #define IDE_MAX_CHAN 16 00047 // Thanks to SATA Port Multipliers: 00048 #define IDE_MAX_LUN_PER_CHAN 2 00049 #define IDE_MAX_LUN (AHCI_MAX_PORT*IDE_MAX_LUN_PER_CHAN) 00050 00051 #define MAX_QUEUE_STAT 8 00052 00053 #define UNIATA_COMM_PORT_VENDOR_STR "UNIATA " "Management Port " UNIATA_VER_STR 00054 00055 #ifndef UNIATA_CORE 00056 00057 #define IOCTL_SCSI_MINIPORT_UNIATA_FIND_DEVICES ((FILE_DEVICE_SCSI << 16) + 0x09a0) 00058 #define IOCTL_SCSI_MINIPORT_UNIATA_DELETE_DEVICE ((FILE_DEVICE_SCSI << 16) + 0x09a1) 00059 #define IOCTL_SCSI_MINIPORT_UNIATA_SET_MAX_MODE ((FILE_DEVICE_SCSI << 16) + 0x09a2) 00060 #define IOCTL_SCSI_MINIPORT_UNIATA_GET_MODE ((FILE_DEVICE_SCSI << 16) + 0x09a3) 00061 #define IOCTL_SCSI_MINIPORT_UNIATA_ADAPTER_INFO ((FILE_DEVICE_SCSI << 16) + 0x09a4) 00062 //#define IOCTL_SCSI_MINIPORT_UNIATA_LUN_IDENT ((FILE_DEVICE_SCSI << 16) + 0x09a5) -> IOCTL_SCSI_MINIPORT_IDENTIFY 00063 #define IOCTL_SCSI_MINIPORT_UNIATA_RESETBB ((FILE_DEVICE_SCSI << 16) + 0x09a5) 00064 #define IOCTL_SCSI_MINIPORT_UNIATA_RESET_DEVICE ((FILE_DEVICE_SCSI << 16) + 0x09a6) 00065 #define IOCTL_SCSI_MINIPORT_UNIATA_REG_IO ((FILE_DEVICE_SCSI << 16) + 0x09a7) 00066 #define IOCTL_SCSI_MINIPORT_UNIATA_GET_VERSION ((FILE_DEVICE_SCSI << 16) + 0x09a8) 00067 00068 typedef struct _ADDREMOVEDEV { 00069 ULONG WaitForPhysicalLink; // us 00070 ULONG Flags; 00071 00072 #define UNIATA_REMOVE_FLAGS_HIDE 0x01 00073 #define UNIATA_ADD_FLAGS_UNHIDE 0x01 00074 00075 } ADDREMOVEDEV, *PADDREMOVEDEV; 00076 00077 typedef struct _SETTRANSFERMODE { 00078 ULONG MaxMode; 00079 ULONG OrigMode; 00080 BOOLEAN ApplyImmediately; 00081 UCHAR Reserved[3]; 00082 } SETTRANSFERMODE, *PSETTRANSFERMODE; 00083 00084 typedef struct _GETTRANSFERMODE { 00085 ULONG MaxMode; 00086 ULONG OrigMode; 00087 ULONG CurrentMode; 00088 ULONG Reserved; 00089 } GETTRANSFERMODE, *PGETTRANSFERMODE; 00090 00091 typedef struct _GETDRVVERSION { 00092 ULONG Length; 00093 USHORT VersionMj; 00094 USHORT VersionMn; 00095 USHORT SubVerMj; 00096 USHORT SubVerMn; 00097 ULONG Reserved; 00098 } GETDRVVERSION, *PGETDRVVERSION; 00099 00100 typedef struct _CHANINFO { 00101 ULONG MaxTransferMode; // may differ from Controller's value due to 40-pin cable 00102 ULONG ChannelCtrlFlags; 00103 //#ifdef QUEUE_STATISTICS 00104 LONGLONG QueueStat[MAX_QUEUE_STAT]; 00105 LONGLONG ReorderCount; 00106 LONGLONG IntersectCount; 00107 LONGLONG TryReorderCount; 00108 LONGLONG TryReorderHeadCount; 00109 LONGLONG TryReorderTailCount; /* in-order requests */ 00110 //#endif //QUEUE_STATISTICS 00111 } CHANINFO, *PCHANINFO; 00112 00113 typedef struct _ADAPTERINFO { 00114 // Device identification 00115 ULONG HeaderLength; 00116 ULONG DevID; 00117 ULONG RevID; 00118 ULONG slotNumber; 00119 ULONG SystemIoBusNumber; 00120 ULONG DevIndex; 00121 00122 ULONG Channel; 00123 00124 ULONG HbaCtrlFlags; 00125 BOOLEAN simplexOnly; 00126 BOOLEAN MemIo; 00127 BOOLEAN UnknownDev; 00128 BOOLEAN MasterDev; 00129 00130 ULONG MaxTransferMode; 00131 ULONG HwFlags; 00132 ULONG OrigAdapterInterfaceType; 00133 00134 CHAR DeviceName[64]; 00135 00136 ULONG BusInterruptLevel; // Interrupt level 00137 ULONG InterruptMode; // Interrupt Mode (Level or Edge) 00138 ULONG BusInterruptVector; 00139 // Number of channels being supported by one instantiation 00140 // of the device extension. Normally (and correctly) one, but 00141 // with so many broken PCI IDE controllers being sold, we have 00142 // to support them. 00143 ULONG NumberChannels; 00144 BOOLEAN ChanInfoValid; 00145 00146 UCHAR NumberLuns; 00147 BOOLEAN LunInfoValid; 00148 CHAR Reserved; 00149 00150 ULONG AdapterInterfaceType; 00151 00152 CHANINFO Chan[AHCI_MAX_PORT]; 00153 00154 } ADAPTERINFO, *PADAPTERINFO; 00155 00156 #ifdef USER_MODE 00157 00158 typedef enum _INTERFACE_TYPE { 00159 InterfaceTypeUndefined = -1, 00160 Internal, 00161 Isa, 00162 Eisa, 00163 MicroChannel, 00164 TurboChannel, 00165 PCIBus, 00166 VMEBus, 00167 NuBus, 00168 PCMCIABus, 00169 CBus, 00170 MPIBus, 00171 MPSABus, 00172 ProcessorInternal, 00173 InternalPowerBus, 00174 PNPISABus, 00175 MaximumInterfaceType 00176 } INTERFACE_TYPE, *PINTERFACE_TYPE; 00177 00178 typedef struct _PCI_SLOT_NUMBER { 00179 union { 00180 struct { 00181 ULONG DeviceNumber:5; 00182 ULONG FunctionNumber:3; 00183 ULONG Reserved:24; 00184 } bits; 00185 ULONG AsULONG; 00186 } u; 00187 } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER; 00188 00189 #endif 00190 00191 #ifndef ATA_FLAGS_DRDY_REQUIRED 00192 00193 //The ATA_PASS_THROUGH_DIRECT structure is used in conjunction with an IOCTL_ATA_PASS_THROUGH_DIRECT request to instruct the port driver to send an embedded ATA command to the target device. 00194 00195 typedef struct _ATA_PASS_THROUGH_DIRECT { 00196 USHORT Length; 00197 USHORT AtaFlags; 00198 UCHAR PathId; 00199 UCHAR TargetId; 00200 UCHAR Lun; 00201 UCHAR ReservedAsUchar; 00202 ULONG DataTransferLength; 00203 ULONG TimeOutValue; 00204 ULONG ReservedAsUlong; 00205 PVOID DataBuffer; 00206 UCHAR PreviousTaskFile[8]; 00207 UCHAR CurrentTaskFile[8]; 00208 } ATA_PASS_THROUGH_DIRECT, *PATA_PASS_THROUGH_DIRECT; 00209 00210 #define ATA_FLAGS_DRDY_REQUIRED 0x01 // Wait for DRDY status from the device before sending the command to the device. 00211 #define ATA_FLAGS_DATA_OUT 0x02 // Write data to the device. 00212 #define ATA_FLAGS_DATA_IN 0x04 // Read data from the device. 00213 #define ATA_FLAGS_48BIT_COMMAND 0x08 // The ATA command to be send uses the 48 bit LBA feature set. 00214 // When this flag is set, the contents of the PreviousTaskFile member in the 00215 // ATA_PASS_THROUGH_DIRECT structure should be valid. 00216 00217 #endif //ATA_FLAGS_DRDY_REQUIRED 00218 00219 #pragma pack(1) 00220 typedef struct _IDEREGS_EX { 00221 UCHAR bFeaturesReg; // Used for specifying SMART "commands". 00222 UCHAR bSectorCountReg; // IDE sector count register 00223 UCHAR bSectorNumberReg; // IDE sector number register 00224 UCHAR bCylLowReg; // IDE low order cylinder value 00225 UCHAR bCylHighReg; // IDE high order cylinder value 00226 UCHAR bDriveHeadReg; // IDE drive/head register 00227 UCHAR bCommandReg; // Actual IDE command. 00228 UCHAR bOpFlags; // 00 - send 00229 // 01 - read regs 00230 // 08 - lba48 00231 // 10 - treat timeout as msec 00232 00233 #define UNIATA_SPTI_EX_SND 0x00 00234 #define UNIATA_SPTI_EX_RCV 0x01 00235 #define UNIATA_SPTI_EX_LBA48 0x08 00236 #define UNIATA_SPTI_EX_SPEC_TO 0x10 00237 //#define UNIATA_SPTI_EX_FREEZE_TO 0x20 // do not reset device on timeout and keep interrupts disabled 00238 #define UNIATA_SPTI_EX_USE_DMA 0x20 // Force DMA transfer mode 00239 00240 UCHAR bFeaturesRegH; // feature (high part for LBA48 mode) 00241 UCHAR bSectorCountRegH; // IDE sector count register (high part for LBA48 mode) 00242 UCHAR bSectorNumberRegH; // IDE sector number register (high part for LBA48 mode) 00243 UCHAR bCylLowRegH; // IDE low order cylinder value (high part for LBA48 mode) 00244 UCHAR bCylHighRegH; // IDE high order cylinder value (high part for LBA48 mode) 00245 UCHAR bReserved2; // 0 00246 } IDEREGS_EX, *PIDEREGS_EX, *LPIDEREGS_EX; 00247 00248 typedef struct _UNIATA_REG_IO { 00249 USHORT RegIDX; 00250 UCHAR RegSz:3; // 0=1, 1=2, 2=4, 3=1+1 (for lba48) 4=2+2 (for lba48) 00251 UCHAR InOut:1; // 0=in, 1=out 00252 UCHAR Reserved:4; 00253 UCHAR Reserved1; 00254 union { 00255 ULONG Data; 00256 ULONG d32; 00257 USHORT d16[2]; 00258 USHORT d8[2]; 00259 }; 00260 } UNIATA_REG_IO, *PUNIATA_REG_IO; 00261 00262 typedef struct _UNIATA_REG_IO_HDR { 00263 ULONG ItemCount; 00264 UNIATA_REG_IO r[1]; 00265 } UNIATA_REG_IO_HDR, *PUNIATA_REG_IO_HDR; 00266 #pragma pack() 00267 00268 typedef struct _UNIATA_CTL { 00269 SRB_IO_CONTROL hdr; 00270 SCSI_ADDRESS addr; 00271 union { 00272 UCHAR RawData[1]; 00273 ADDREMOVEDEV FindDelDev; 00274 SETTRANSFERMODE SetMode; 00275 GETTRANSFERMODE GetMode; 00276 ADAPTERINFO AdapterInfo; 00277 // IDENTIFY_DATA2 LunIdent; 00278 // ATA_PASS_THROUGH_DIRECT AtaDirect; 00279 GETDRVVERSION Version; 00280 UNIATA_REG_IO_HDR RegIo; 00281 }; 00282 } UNIATA_CTL, *PUNIATA_CTL; 00283 00284 #endif //UNIATA_CORE 00285 00286 #ifdef __cplusplus 00287 }; 00288 #endif //__cplusplus 00289 00290 #pragma pack(pop) 00291 00292 #endif //__UNIATA_IO_CONTROL_CODES__H__ Generated on Sun May 27 2012 04:28:28 for ReactOS by
1.7.6.1
|