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

uata_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 doxygen 1.7.6.1

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