root/drivers/scsi/eata_generic.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   1 /********************************************************
   2 * Header file for eata_dma.c and eata_pio.c             *
   3 * Linux EATA SCSI drivers                               *
   4 * (c) 1993,94,95 Michael Neuffer                        *
   5 *********************************************************
   6 * last change: 95/11/07                                 *
   7 ********************************************************/
   8 
   9 
  10 #ifndef _EATA_GENERIC_H
  11 #define _EATA_GENERIC_H
  12 
  13 
  14 
  15 /*********************************************
  16  * Misc. definitions                         *
  17  *********************************************/
  18 
  19 #ifndef TRUE
  20 #define TRUE 1
  21 #endif
  22 #ifndef FALSE
  23 #define FALSE 0
  24 #endif
  25 
  26 #define min(a,b) ((a<b)?(a):(b))
  27 
  28 #define R_LIMIT 0x20000
  29 
  30 #define MAXISA     4
  31 #define MAXEISA   16  
  32 #define MAXPCI    16
  33 #define MAXIRQ    16 
  34 #define MAXTARGET 16
  35 #define MAXCHANNEL 3
  36 
  37 #define IS_ISA     'I'
  38 #define IS_EISA    'E'
  39 #define IS_PCI     'P'
  40 
  41 #define BROKEN_INQUIRY  1
  42 
  43 #define BUSMASTER       0xff
  44 #define PIO             0xfe
  45 
  46 #define EATA_SIGNATURE  0x45415441     /* BIG ENDIAN coded "EATA" sig.   */
  47 
  48 #define DPT_ID1         0x12
  49 #define DPT_ID2         0x14
  50 
  51 #define ATT_ID1         0x06
  52 #define ATT_ID2         0x94
  53 #define ATT_ID3         0x0
  54 
  55 #define NEC_ID1         0x38
  56 #define NEC_ID2         0xa3
  57 #define NEC_ID3         0x82
  58 
  59 
  60 #define EATA_CP_SIZE    44
  61 
  62 #define MAX_PCI_DEVICES 32             /* Maximum # Of Devices Per Bus   */
  63 #define MAX_METHOD_2    16             /* Max Devices For Method 2       */
  64 #define MAX_PCI_BUS     16             /* Maximum # Of Busses Allowed    */
  65 
  66 #define SG_SIZE         64 
  67 #define SG_SIZE_BIG     509            /* max. 509 elements, one 4k page */
  68 
  69 #define C_P_L_DIV       2 /* 1 <= C_P_L_DIV <= 8            
  70                            * You can use this parameter to fine-tune
  71                            * the driver. Depending on the number of 
  72                            * devices and their speed and ability to queue 
  73                            * commands, you will get the best results with a
  74                            * value
  75                            * ~= numdevices-(devices_unable_to_queue_commands/2)
  76                            * The reason for this is that the disk driver 
  77                            * tends to flood the queue, so that other 
  78                            * drivers have problems to queue commands 
  79                            * themselves. This can for example result in 
  80                            * the effect that the tape stops during disk 
  81                            * accesses. 
  82                            */
  83 
  84 #define FREE       0
  85 #define OK         0
  86 #define NO_TIMEOUT 0
  87 #define USED       1
  88 #define TIMEOUT    2
  89 #define RESET      4
  90 #define LOCKED     8
  91 
  92 #define HD(cmd)  ((hostdata *)&(cmd->host->hostdata))
  93 #define CD(cmd)  ((struct eata_ccb *)(cmd->host_scribble))
  94 #define SD(host) ((hostdata *)&(host->hostdata))
  95 
  96 #define DELAY(x) { __u32 i; i = jiffies + (x * HZ); while (jiffies < i) barrier(); }
  97 #define DEL2(x)  { __u32 i; for (i = 0; i < 0xffff * x; i++); }
  98 
  99 /***********************************************
 100  *    EATA Command & Register definitions      *
 101  ***********************************************/
 102 #define PCI_REG_DPTconfig        0x40    
 103 #define PCI_REG_PumpModeAddress  0x44    
 104 #define PCI_REG_PumpModeData     0x48    
 105 #define PCI_REG_ConfigParam1     0x50    
 106 #define PCI_REG_ConfigParam2     0x54    
 107 
 108 
 109 #define EATA_CMD_PIO_SETUPTEST   0xc6
 110 #define EATA_CMD_PIO_READ_CONFIG 0xf0
 111 #define EATA_CMD_PIO_SET_CONFIG  0xf1
 112 #define EATA_CMD_PIO_SEND_CP     0xf2
 113 #define EATA_CMD_PIO_RECEIVE_SP  0xf3
 114 #define EATA_CMD_PIO_TRUNC       0xf4
 115 
 116 #define EATA_CMD_RESET           0xf9
 117 #define EATA_CMD_IMMEDIATE       0xfa
 118 
 119 #define EATA_CMD_DMA_READ_CONFIG 0xfd
 120 #define EATA_CMD_DMA_SET_CONFIG  0xfe
 121 #define EATA_CMD_DMA_SEND_CP     0xff
 122 
 123 #define ECS_EMULATE_SENSE        0xd4
 124 
 125 #define EATA_GENERIC_ABORT       0x00 
 126 #define EATA_SPECIFIC_RESET      0x01
 127 #define EATA_BUS_RESET           0x02
 128 #define EATA_SPECIFIC_ABORT      0x03
 129 #define EATA_QUIET_INTR          0x04
 130 #define EATA_COLD_BOOT_HBA       0x06      /* Only as a last resort     */
 131 #define EATA_FORCE_IO            0x07
 132 
 133 
 134 #define HA_WCOMMAND    0x07        /* command register offset   */
 135 #define HA_WCOMMAND2   0x06        /* immediate command offset  */
 136 #define HA_WSUBCODE    0x05 
 137 #define HA_WSUBLUN     0x04 
 138 #define HA_WDMAADDR    0x02        /* DMA address LSB offset    */  
 139 #define HA_RAUXSTAT    0x08        /* aux status register offset*/
 140 #define HA_RSTATUS     0x07        /* status register offset    */
 141 #define HA_RDATA       0x00        /* data register (16bit)     */
 142 
 143 #define HA_ABUSY       0x01        /* aux busy bit              */
 144 #define HA_AIRQ        0x02        /* aux IRQ pending bit       */
 145 #define HA_SERROR      0x01        /* pr. command ended in error*/
 146 #define HA_SMORE       0x02        /* more data soon to come    */
 147 #define HA_SCORR       0x04        /* data corrected            */
 148 #define HA_SDRQ        0x08        /* data request active       */
 149 #define HA_SSC         0x10        /* seek complete             */
 150 #define HA_SFAULT      0x20        /* write fault               */
 151 #define HA_SREADY      0x40        /* drive ready               */
 152 #define HA_SBUSY       0x80        /* drive busy                */
 153 #define HA_SDRDY       HA_SSC+HA_SREADY+HA_SDRQ 
 154 
 155 /**********************************************
 156  * Message definitions                        *
 157  **********************************************/
 158 
 159 #define HA_NO_ERROR      0x00   /* No Error                             */
 160 #define HA_ERR_SEL_TO    0x01   /* Selection Timeout                    */
 161 #define HA_ERR_CMD_TO    0x02   /* Command Timeout                      */
 162 #define HA_ERR_RESET     0x03   /* SCSI Bus Reset Received              */
 163 #define HA_INIT_POWERUP  0x04   /* Initial Controller Power-up          */
 164 #define HA_UNX_BUSPHASE  0x05   /* Unexpected Bus Phase                 */
 165 #define HA_UNX_BUS_FREE  0x06   /* Unexpected Bus Free                  */
 166 #define HA_BUS_PARITY    0x07   /* Bus Parity Error                     */
 167 #define HA_SCSI_HUNG     0x08   /* SCSI Hung                            */
 168 #define HA_UNX_MSGRJCT   0x09   /* Unexpected Message Rejected          */
 169 #define HA_RESET_STUCK   0x0a   /* SCSI Bus Reset Stuck                 */
 170 #define HA_RSENSE_FAIL   0x0b   /* Auto Request-Sense Failed            */
 171 #define HA_PARITY_ERR    0x0c   /* Controller Ram Parity Error          */
 172 #define HA_CP_ABORT_NA   0x0d   /* Abort Message sent to non-active cmd */
 173 #define HA_CP_ABORTED    0x0e   /* Abort Message sent to active cmd     */
 174 #define HA_CP_RESET_NA   0x0f   /* Reset Message sent to non-active cmd */
 175 #define HA_CP_RESET      0x10   /* Reset Message sent to active cmd     */
 176 #define HA_ECC_ERR       0x11   /* Controller Ram ECC Error             */
 177 #define HA_PCI_PARITY    0x12   /* PCI Parity Error                     */
 178 #define HA_PCI_MABORT    0x13   /* PCI Master Abort                     */
 179 #define HA_PCI_TABORT    0x14   /* PCI Target Abort                     */
 180 #define HA_PCI_STABORT   0x15   /* PCI Signaled Target Abort            */
 181 
 182 /**********************************************
 183  *  Other  definitions                        *
 184  **********************************************/
 185 
 186 struct reg_bit {      /* reading this one will clear the interrupt    */
 187     __u8 error:1;     /* previous command ended in an error           */
 188     __u8 more:1;      /* more DATA coming soon, poll BSY & DRQ (PIO)  */
 189     __u8 corr:1;      /* data read was successfully corrected with ECC*/
 190     __u8 drq:1;       /* data request active  */     
 191     __u8 sc:1;        /* seek complete        */
 192     __u8 fault:1;     /* write fault          */
 193     __u8 ready:1;     /* drive ready          */
 194     __u8 busy:1;      /* controller busy      */
 195 };
 196 
 197 struct reg_abit {     /* reading this won't clear the interrupt */
 198     __u8 abusy:1;     /* auxiliary busy                         */
 199     __u8 irq:1;       /* set when drive interrupt is asserted   */
 200     __u8 dummy:6;
 201 };
 202 
 203 struct eata_register {      /* EATA register set */
 204     __u8 data_reg[2];       /* R, couldn't figure this one out          */
 205     __u8 cp_addr[4];        /* W, CP address register                   */
 206     union { 
 207         __u8 command;       /* W, command code: [read|set] conf, send CP*/
 208         struct reg_bit status;  /* R, see register_bit1                 */
 209         __u8 statusbyte;
 210     } ovr;   
 211     struct reg_abit aux_stat; /* R, see register_bit2                   */
 212 };
 213 
 214 struct get_conf {             /* Read Configuration Array               */
 215     __u32  len;               /* Should return 0x22, 0x24, etc          */
 216     __u32 signature;          /* Signature MUST be "EATA"               */
 217     __u8    version2:4,
 218              version:4;       /* EATA Version level                     */
 219     __u8 OCS_enabled:1,       /* Overlap Command Support enabled        */
 220          TAR_support:1,       /* SCSI Target Mode supported             */
 221               TRNXFR:1,       /* Truncate Transfer Cmd not necessary    *
 222                                * Only used in PIO Mode                  */
 223         MORE_support:1,       /* MORE supported (only PIO Mode)         */
 224          DMA_support:1,       /* DMA supported Driver uses only         *
 225                                * this mode                              */
 226            DMA_valid:1,       /* DRQ value in Byte 30 is valid          */
 227                  ATA:1,       /* ATA device connected (not supported)   */
 228            HAA_valid:1;       /* Hostadapter Address is valid           */
 229 
 230     __u16 cppadlen;           /* Number of pad bytes send after CD data *
 231                                * set to zero for DMA commands           */
 232     __u8 scsi_id[4];          /* SCSI ID of controller 2-0 Byte 0 res.  *
 233                                * if not, zero is returned               */
 234     __u32  cplen;             /* CP length: number of valid cp bytes    */
 235     __u32  splen;             /* Number of bytes returned after         * 
 236                                * Receive SP command                     */
 237     __u16 queuesiz;           /* max number of queueable CPs            */
 238     __u16 dummy;
 239     __u16 SGsiz;              /* max number of SG table entries         */
 240     __u8    IRQ:4,            /* IRQ used this HA                       */
 241          IRQ_TR:1,            /* IRQ Trigger: 0=edge, 1=level           */
 242          SECOND:1,            /* This is a secondary controller         */
 243     DMA_channel:2;            /* DRQ index, DRQ is 2comp of DRQX        */
 244     __u8 sync;                /* device at ID 7 tru 0 is running in     *
 245                                * synchronous mode, this will disappear  */
 246     __u8   DSBLE:1,           /* ISA i/o addressing is disabled         */
 247          FORCADR:1,           /* i/o address has been forced            */
 248           SG_64K:1,
 249           SG_UAE:1,
 250                 :4;
 251     __u8  MAX_ID:5,           /* Max number of SCSI target IDs          */
 252         MAX_CHAN:3;           /* Number of SCSI busses on HBA           */
 253     __u8 MAX_LUN;             /* Max number of LUNs                     */
 254     __u8        :3,
 255          AUTOTRM:1,
 256          M1_inst:1,
 257          ID_qest:1,           /* Raidnum ID is questionable             */
 258           is_PCI:1,           /* HBA is PCI                             */
 259          is_EISA:1;           /* HBA is EISA                            */
 260     __u8 unused[478]; 
 261 };
 262 
 263 struct eata_sg_list
 264 {
 265     __u32 data;
 266     __u32 len;
 267 };
 268 
 269 struct eata_ccb {             /* Send Command Packet structure      */
 270  
 271     __u8 SCSI_Reset:1,        /* Cause a SCSI Bus reset on the cmd      */
 272            HBA_Init:1,        /* Cause Controller to reinitialize       */
 273        Auto_Req_Sen:1,        /* Do Auto Request Sense on errors        */
 274             scatter:1,        /* Data Ptr points to a SG Packet         */
 275              Resrvd:1,        /* RFU                                    */
 276           Interpret:1,        /* Interpret the SCSI cdb of own use      */
 277             DataOut:1,        /* Data Out phase with command            */
 278              DataIn:1;        /* Data In phase with command             */
 279     __u8 reqlen;              /* Request Sense Length                   * 
 280                                * Valid if Auto_Req_Sen=1                */
 281     __u8 unused[3];
 282     __u8  FWNEST:1,           /* send cmd to phys RAID component        */
 283          unused2:7;
 284     __u8 Phsunit:1,           /* physical unit on mirrored pair         */
 285             I_AT:1,           /* inhibit address translation            */
 286          I_HBA_C:1,           /* HBA inhibit caching                    */
 287          unused3:5;
 288 
 289     __u8     cp_id:5,         /* SCSI Device ID of target               */ 
 290         cp_channel:3;         /* SCSI Channel # of HBA                  */
 291     __u8    cp_lun:3,
 292                   :2,
 293          cp_luntar:1,         /* CP is for target ROUTINE               */
 294          cp_dispri:1,         /* Grant disconnect privilege             */
 295        cp_identify:1;         /* Always TRUE                            */
 296     __u8 cp_msg1;             /* Message bytes 0-3                      */
 297     __u8 cp_msg2;
 298     __u8 cp_msg3;
 299     __u8 cp_cdb[12];          /* Command Descriptor Block               */
 300     __u32 cp_datalen;         /* Data Transfer Length                   *
 301                                * If scatter=1 len of sg package         */
 302     void *cp_viraddr;         /* address of this ccb                    */
 303     __u32 cp_dataDMA;         /* Data Address, if scatter=1             *
 304                                * address of scatter packet              */
 305     __u32 cp_statDMA;         /* address for Status Packet              */ 
 306     __u32 cp_reqDMA;          /* Request Sense Address, used if         *
 307                                * CP command ends with error             */
 308     /* Additional CP info begins here */
 309     __u32 timestamp;          /* Needed to measure command latency      */
 310     __u32 timeout;
 311     __u8 sizeindex;
 312     __u8 rw_latency;
 313     __u8 retries;
 314     __u8 status;              /* status of this queueslot               */
 315     Scsi_Cmnd *cmd;           /* address of cmd                         */
 316     struct eata_sg_list *sg_list;
 317 };
 318 
 319 
 320 struct eata_sp {
 321     __u8 hba_stat:7,          /* HBA status                             */
 322               EOC:1;          /* True if command finished               */
 323     __u8 scsi_stat;           /* Target SCSI status                     */
 324     __u8 reserved[2];
 325     __u32  residue_len;       /* Number of bytes not transferred        */
 326     struct eata_ccb *ccb;     /* Address set in COMMAND PACKET          */
 327     __u8 msg[12];
 328 };
 329 
 330 typedef struct hstd {
 331     __u8   vendor[9];
 332     __u8   name[18];
 333     __u8   revision[6];
 334     __u8   EATA_revision;
 335     __u8   bustype;              /* bustype of HBA             */
 336     __u8   channel;              /* # of avail. scsi channels  */
 337     __u8   state;                /* state of HBA               */
 338     __u8   primary;              /* true if primary            */
 339     __u8   broken_INQUIRY:1;     /* This is an EISA HBA with   *
 340                                   * broken INQUIRY             */
 341     __u8   do_latency;           /* Latency measurement flag   */
 342     __u32  reads[13];
 343     __u32  writes[13];
 344     __u32  reads_lat[12][4];
 345     __u32  writes_lat[12][4];
 346                                  /* state of Target (RESET,..) */
 347     __u8   t_state[MAXCHANNEL][MAXTARGET];   
 348                                  /* timeouts on target         */
 349     __u32  t_timeout[MAXCHANNEL][MAXTARGET]; 
 350     __u32  last_ccb;             /* Last used ccb              */
 351     __u32  cplen;                /* size of CP in words        */
 352     __u16  cppadlen;             /* pad length of cp in words  */
 353     __u8   hostid;               /* SCSI ID of HBA             */
 354     __u8   devflags;             /* bits set for detected devices */
 355     __u8   moresupport;          /* HBA supports MORE flag     */
 356     struct Scsi_Host *next;         
 357     struct Scsi_Host *prev;
 358     struct eata_sp sp;           /* status packet              */ 
 359     struct eata_ccb ccb[0];      /* ccb array begins here      */
 360 }hostdata;
 361 
 362 /* structure for max. 2 emulated drives */
 363 struct drive_geom_emul {
 364     __u8  trans;                 /* translation flag 1=transl */
 365     __u8  channel;               /* SCSI channel number       */
 366     __u8  HBA;                   /* HBA number (prim/sec)     */
 367     __u8  id;                    /* drive id                  */
 368     __u8  lun;                   /* drive lun                 */
 369     __u32 heads;                 /* number of heads           */
 370     __u32 sectors;               /* number of sectors         */
 371     __u32 cylinder;              /* number of cylinders       */
 372 };
 373 
 374 struct geom_emul {
 375     __u8 bios_drives;            /* number of emulated drives */
 376     struct drive_geom_emul drv[2]; /* drive structures        */
 377 };
 378 
 379 #endif /* _EATA_GENERIC_H */
 380 
 381 /*
 382  * Overrides for Emacs so that we almost follow Linus's tabbing style.
 383  * Emacs will notice this stuff at the end of the file and automatically
 384  * adjust the settings for this buffer only.  This must remain at the end
 385  * of the file.
 386  * ---------------------------------------------------------------------------
 387  * Local variables:
 388  * c-indent-level: 4
 389  * c-brace-imaginary-offset: 0
 390  * c-brace-offset: -4
 391  * c-argdecl-indent: 4
 392  * c-label-offset: -4
 393  * c-continued-statement-offset: 4
 394  * c-continued-brace-offset: 0
 395  * tab-width: 8
 396  * End:
 397  */

/* [previous][next][first][last][top][bottom][index][help] */