[BACK]Return to gdtreg.h CVS log [TXT][DIR] Up to [local] / sys / dev / ic

Annotation of sys/dev/ic/gdtreg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: gdtreg.h,v 1.4 2006/05/07 23:18:59 marco Exp $        */
                      2:
                      3: /*
                      4:  * Copyright (c) 1999, 2000 Niklas Hallqvist.  All rights reserved.
                      5:  *
                      6:  * Redistribution and use in source and binary forms, with or without
                      7:  * modification, are permitted provided that the following conditions
                      8:  * are met:
                      9:  * 1. Redistributions of source code must retain the above copyright
                     10:  *    notice, this list of conditions and the following disclaimer.
                     11:  * 2. Redistributions in binary form must reproduce the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer in the
                     13:  *    documentation and/or other materials provided with the distribution.
                     14:  *
                     15:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     16:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     17:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     18:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     19:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     20:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     21:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     22:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     23:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     24:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     25:  */
                     26:
                     27: /*
                     28:  * This driver would not have written if it was not for the hardware donations
                     29:  * from both ICP-Vortex and Öko.neT.  I want to thank them for their support.
                     30:  */
                     31:
                     32: #define GDT_MAXBUS             6       /* XXX Why not 5? */
                     33: #define GDT_MAX_HDRIVES                35      /* 5 busses * 7 targets XXX correct? */
                     34: #define GDT_MAXID              127     /* Fibre-channel maximum ID */
                     35: #define GDT_MAXOFFSETS         128
                     36: #define GDT_MAXSG              128     /* Max. s/g elements */
                     37: #define GDT_PROTOCOL_VERSION   1
                     38: #define GDT_LINUX_OS           8       /* Used for cache optimization */
                     39: #define GDT_SCATTER_GATHER     1       /* s/g feature */
                     40: #define GDT_SECS32             0x1f    /* round capacity */
                     41: #define GDT_LOCALBOARD         0       /* Board node always 0 */
                     42: #define GDT_MAXCMDS            124
                     43: #define GDT_SECTOR_SIZE                0x200   /* Always 512 bytes for cache devs */
                     44:
                     45: /* DPMEM constants */
                     46: #define GDT_MPR_MAGIC          0xc0ffee11
                     47: #define GDT_IC_HEADER_BYTES    48
                     48: #define GDT_IC_QUEUE_BYTES     4
                     49: #define GDT_DPMEM_COMMAND_OFFSET \
                     50:     (GDT_IC_HEADER_BYTES + GDT_IC_QUEUE_BYTES * GDT_MAXOFFSETS)
                     51:
                     52: #if 1
                     53: /* Geometry constants. XXX probably not needed. */
                     54: #define GDT_MAXCYLS            1024
                     55: #define GDT_HEADS              64
                     56: #define GDT_SECS               32      /* mapping 64*32 */
                     57: #define GDT_MEDHEADS           127
                     58: #define GDT_MEDSECS            63      /* mapping 127*63 */
                     59: #define GDT_BIGHEADS           255
                     60: #define GDT_BIGSECS            63      /* mapping 255*63 */
                     61: #endif
                     62:
                     63: /* Cache/raw service commands */
                     64: #define GDT_INIT       0               /* service initialization */
                     65: #define GDT_READ       1               /* read command */
                     66: #define GDT_WRITE      2               /* write command */
                     67: #define GDT_INFO       3               /* information about devices */
                     68: #define GDT_FLUSH      4               /* flush dirty cache buffers */
                     69: #define GDT_IOCTL      5               /* ioctl command */
                     70: #define GDT_DEVTYPE    9               /* additional information */
                     71: #define GDT_MOUNT      10              /* mount cache device */
                     72: #define GDT_UNMOUNT    11              /* unmount cache device */
                     73: #define GDT_SET_FEAT   12              /* set features (scatter/gather) */
                     74: #define GDT_GET_FEAT   13              /* get features */
                     75: #define GDT_WRITE_THR  16              /* write through */
                     76: #define GDT_READ_THR   17              /* read through */
                     77: #define GDT_EXT_INFO   18              /* extended info */
                     78: #define GDT_RESET      19              /* controller reset */
                     79:
                     80: /* Additional raw service commands */
                     81: #define GDT_RESERVE    14              /* reserve device to raw service */
                     82: #define GDT_RELEASE    15              /* release device */
                     83: #define GDT_RESERVE_ALL 16             /* reserve all devices */
                     84: #define GDT_RELEASE_ALL 17             /* release all devices */
                     85: #define GDT_RESET_BUS  18              /* reset bus */
                     86: #define GDT_SCAN_START 19              /* start device scan */
                     87: #define GDT_SCAN_END   20              /* stop device scan */
                     88:
                     89: /* IOCTL command defines */
                     90: #define GDT_SCSI_DR_INFO       0x00    /* SCSI drive info */
                     91: #define GDT_SCSI_CHAN_CNT      0x05    /* SCSI channel count */
                     92: #define GDT_SCSI_DR_LIST       0x06    /* SCSI drive list */
                     93: #define GDT_SCSI_DEF_CNT       0x15    /* grown/primary defects */
                     94: #define GDT_DSK_STATISTICS     0x4b    /* SCSI disk statistics */
                     95: #define GDT_IOCHAN_DESC                0x5d    /* description of IO channel */
                     96: #define GDT_IOCHAN_RAW_DESC    0x5e    /* description of raw IO channel */
                     97:
                     98: #define GDT_L_CTRL_PATTERN     0x20000000L     /* SCSI IOCTL mask */
                     99: #define GDT_ARRAY_INFO         0x12            /* array drive info */
                    100: #define GDT_ARRAY_DRV_LIST     0x0f            /* array drive list */
                    101: #define GDT_LA_CTRL_PATTERN    0x10000000L     /* array IOCTL mask */
                    102: #define GDT_CACHE_DRV_CNT      0x01            /* cache drive count */
                    103: #define GDT_CACHE_DRV_LIST     0x02            /* cache drive list */
                    104: #define GDT_CACHE_INFO         0x04            /* cache info */
                    105: #define GDT_CACHE_CONFIG       0x05            /* cache configuration */
                    106: #define GDT_CACHE_DRV_INFO     0x07            /* cache drive info */
                    107: #define GDT_BOARD_FEATURES     0x15            /* controller features */
                    108: #define GDT_BOARD_INFO         0x28            /* controller info */
                    109: #define GDT_HOST_GET           0x10001L        /* get host drive list */
                    110: #define GDT_IO_CHANNEL         0x20000L        /* default IO channel */
                    111: #define GDT_INVALID_CHANNEL    0xffffL         /* invalid channel */
                    112:
                    113: /* XXX not belonging here */
                    114: /* IOCTLs */
                    115: #define GDTIOCTL_MASK      ('J' << 8)
                    116: #define GDTIOCTL_GENERAL    (GDTIOCTL_MASK | 0)        /* general IOCTL */
                    117: #define GDTIOCTL_DRVERS            (GDTIOCTL_MASK | 1) /* get driver version */
                    118: #define GDTIOCTL_CTRTYPE    (GDTIOCTL_MASK | 2)        /* get controller type */
                    119: #define GDTIOCTL_CTRCNT            (GDTIOCTL_MASK | 5) /* get controller count */
                    120: #define GDTIOCTL_LOCKDRV    (GDTIOCTL_MASK | 6)        /* lock host drive */
                    121: #define GDTIOCTL_LOCKCHN    (GDTIOCTL_MASK | 7)        /* lock channel */
                    122: #define GDTIOCTL_EVENT     (GDTIOCTL_MASK | 8) /* read controller events */
                    123:
                    124: /* Service errors */
                    125: #define GDT_S_OK               1       /* no error */
                    126: #define GDT_S_BSY              7       /* controller busy */
                    127: #define GDT_S_RAW_SCSI         12      /* raw service: target error */
                    128: #define GDT_S_RAW_ILL          0xff    /* raw service: illegal */
                    129: #define GDT_S_NO_STATUS                0x1000  /* got no status (driver-generated) */
                    130:
                    131: /* Controller services */
                    132: #define GDT_SCSIRAWSERVICE     3
                    133: #define GDT_CACHESERVICE       9
                    134: #define GDT_SCREENSERVICE      11
                    135:
                    136: /* Scatter/gather element */
                    137: #define GDT_SG_PTR             0x00    /* u_int32_t, address */
                    138: #define GDT_SG_LEN             0x04    /* u_int32_t, length */
                    139: #define GDT_SG_SZ              0x08
                    140:
                    141: /* Cache service command */
                    142: #define GDT_CACHE_DEVICENO     0x00    /* u_int16_t, number of cache drive */
                    143: #define GDT_CACHE_BLOCKNO      0x02    /* u_int32_t, block number */
                    144: #define GDT_CACHE_BLOCKCNT     0x06    /* u_int32_t, block count */
                    145: #define GDT_CACHE_DESTADDR     0x0a    /* u_int32_t, dest. addr. (-1: s/g) */
                    146: #define GDT_CACHE_SG_CANZ      0x0e    /* u_int32_t, s/g element count */
                    147: #define GDT_CACHE_SG_LST       0x12    /* [GDT_MAXSG], s/g list */
                    148: #define GDT_CACHE_SZ           (0x12 + GDT_MAXSG * GDT_SG_SZ)
                    149:
                    150: /* Ioctl command */
                    151: #define GDT_IOCTL_PARAM_SIZE   0x00    /* u_int16_t, size of buffer */
                    152: #define GDT_IOCTL_SUBFUNC      0x02    /* u_int32_t, ioctl function */
                    153: #define GDT_IOCTL_CHANNEL      0x06    /* u_int32_t, device */
                    154: #define GDT_IOCTL_P_PARAM      0x0a    /* u_int32_t, buffer */
                    155: #define GDT_IOCTL_SZ           0x0e
                    156:
                    157: /* Screen service command */
                    158: #define GDT_SCREEN_MSG_HANDLE  0x02    /* u_int32_t, message handle */
                    159: #define GDT_SCREEN_MSG_ADDR    0x06    /* u_int32_t, message buffer address */
                    160: #define GDT_SCREEN_SZ          0x0a
                    161:
                    162: /* Raw service command */
                    163: #define GDT_RAW_DIRECTION      0x02    /* u_int32_t, data direction */
                    164: #define GDT_RAW_MDISC_TIME     0x06    /* u_int32_t, disc. time (0: none) */
                    165: #define GDT_RAW_MCON_TIME      0x0a    /* u_int32_t, conn. time (0: none) */
                    166: #define GDT_RAW_SDATA          0x0e    /* u_int32_t, dest. addr. (-1: s/g) */
                    167: #define GDT_RAW_SDLEN          0x12    /* u_int32_t, data length */
                    168: #define GDT_RAW_CLEN           0x16    /* u_int32_t, SCSI cmd len (6/10/12) */
                    169: #define GDT_RAW_CMD            0x1a    /* u_int8_t [12], SCSI command */
                    170: #define GDT_RAW_TARGET         0x26    /* u_int8_t, target ID */
                    171: #define GDT_RAW_LUN            0x27    /* u_int8_t, LUN */
                    172: #define GDT_RAW_BUS            0x28    /* u_int8_t, SCSI bus number */
                    173: #define GDT_RAW_PRIORITY       0x29    /* u_int8_t, only 0 used */
                    174: #define GDT_RAW_SENSE_LEN      0x2a    /* u_int32_t, sense data length */
                    175: #define GDT_RAW_SENSE_DATA     0x2e    /* u_int32_t, sense data address */
                    176: #define GDT_RAW_SG_RANZ                0x36    /* u_int32_t, s/g element count */
                    177: #define GDT_RAW_SG_LST         0x3a    /* [GDT_MAXSG], s/g list */
                    178: #define GDT_RAW_SZ             (0x3e + GDT_MAXSG * GDT_SG_SZ)
                    179:
                    180: /* Command structure */
                    181: #define GDT_CMD_BOARDNODE      0x00    /* u_int32_t, board node (always 0) */
                    182: #define GDT_CMD_COMMANDINDEX   0x04    /* u_int32_t, command number */
                    183: #define GDT_CMD_OPCODE         0x08    /* u_int16_t, opcode (READ, ...) */
                    184: #define GDT_CMD_UNION          0x0a    /* cache/screen/raw service command */
                    185: #define GDT_CMD_UNION_SZ       GDT_RAW_SZ
                    186: #define GDT_CMD_SZ             (0x0a + GDT_CMD_UNION_SZ)
                    187:
                    188: /* Command queue entries */
                    189: #define GDT_OFFSET     0x00    /* u_int16_t, command offset in the DP RAM */
                    190: #define GDT_SERV_ID    0x02    /* u_int16_t, service */
                    191: #define GDT_COMM_Q_SZ  0x04
                    192:
                    193: /* Interface area */
                    194: #define GDT_S_CMD_INDX 0x00    /* u_int8_t, special command */
                    195: #define        GDT_S_STATUS    0x01    /* volatile u_int8_t, status special command */
                    196: #define GDT_S_INFO     0x04    /* u_int32_t [4], add. info special command */
                    197: #define GDT_SEMA0      0x14    /* volatile u_int8_t, command semaphore */
                    198: #define GDT_CMD_INDEX  0x18    /* u_int8_t, command number */
                    199: #define GDT_STATUS     0x1c    /* volatile u_int16_t, command status */
                    200: #define GDT_SERVICE    0x1e    /* u_int16_t, service (for asynch. events) */
                    201: #define GDT_DPR_INFO   0x20    /* u_int32_t [2], additional info */
                    202: #define GDT_COMM_QUEUE 0x28    /* command queue */
                    203: #define GDT_DPR_CMD    (0x30 + GDT_MAXOFFSETS * GDT_COMM_Q_SZ)
                    204:                                /* u_int8_t [], commands */
                    205: #define GDT_DPR_IF_SZ  GDT_DPR_CMD
                    206:
                    207: /* I/O channel header */
                    208: #define GDT_IOC_VERSION                0x00    /* u_int32_t, version (~0: newest) */
                    209: #define GDT_IOC_LIST_ENTRIES   0x04    /* u_int8_t, list entry count */
                    210: #define GDT_IOC_FIRST_CHAN     0x05    /* u_int8_t, first channel number */
                    211: #define GDT_IOC_LAST_CHAN      0x06    /* u_int8_t, last channel number */
                    212: #define GDT_IOC_CHAN_COUNT     0x07    /* u_int8_t, (R) channel count */
                    213: #define GDT_IOC_LIST_OFFSET    0x08    /* u_int32_t, offset of list[0] */
                    214: #define GDT_IOC_HDR_SZ         0x0c
                    215:
                    216: #define GDT_IOC_NEWEST         0xffffffff      /* goes into GDT_IOC_VERSION */
                    217:
                    218: /* Get I/O channel description */
                    219: #define GDT_IOC_ADDRESS                0x00    /* u_int32_t, channel address */
                    220: #define GDT_IOC_TYPE           0x04    /* u_int8_t, type (SCSI/FCSL) */
                    221: #define GDT_IOC_LOCAL_NO       0x05    /* u_int8_t, local number */
                    222: #define GDT_IOC_FEATURES       0x06    /* u_int16_t, channel features */
                    223: #define GDT_IOC_SZ             0x08
                    224:
                    225: /* Get raw I/O channel description */
                    226: #define GDT_RAWIOC_PROC_ID     0x00    /* u_int8_t, processor id */
                    227: #define GDT_RAWIOC_PROC_DEFECT 0x01    /* u_int8_t, defect? */
                    228: #define GDT_RAWIOC_SZ          0x04
                    229:
                    230: /* Get SCSI channel count */
                    231: #define GDT_GETCH_CHANNEL_NO   0x00    /* u_int32_t, channel number */
                    232: #define GDT_GETCH_DRIVE_CNT    0x04    /* u_int32_t, drive count */
                    233: #define GDT_GETCH_SIOP_ID      0x08    /* u_int8_t, SCSI processor ID */
                    234: #define GDT_GETCH_SIOP_STATE   0x09    /* u_int8_t, SCSI processor state */
                    235: #define GDT_GETCH_SZ           0x0a
                    236:
                    237: /* Get SCSI drive numbers */
                    238: #define GDT_GETSCSI_CHAN       0x00    /* u_int32_t, scsi channel number */
                    239: #define GDT_GETSCSI_CNT                0x04    /* u_int32_t, nr of entries */
                    240: #define GDT_GETSCSI_LIST       0x08    /* u_int32_t, minor device nr */
                    241: #define GDT_GETSCSI_LIST_SZ    0x04
                    242: #define GDT_GETSCSI_SZ         (GDT_GETSCSI_LIST_SZ * GDT_MAXID)
                    243:
                    244: /* Cache info/config IOCTL structures */
                    245: #define GDT_CPAR_VERSION       0x00    /* u_int32_t, firmware version */
                    246: #define GDT_CPAR_STATE         0x04    /* u_int16_t, cache state (on/off) */
                    247: #define GDT_CPAR_STRATEGY      0x06    /* u_int16_t, cache strategy */
                    248: #define GDT_CPAR_WRITE_BACK    0x08    /* u_int16_t, write back (on/off) */
                    249: #define GDT_CPAR_BLOCK_SIZE    0x0a    /* u_int16_t, cache block size */
                    250: #define GDT_CPAR_SZ            0x0c
                    251:
                    252: #define GDT_CSTAT_CSIZE                0x00    /* u_int32_t, cache size */
                    253: #define GDT_CSTAT_READ_CNT     0x04    /* u_int32_t, read counter */
                    254: #define GDT_CSTAT_WRITE_CNT    0x08    /* u_int32_t, write counter */
                    255: #define GDT_CSTAT_TR_HITS      0x0c    /* u_int32_t, track hits */
                    256: #define GDT_CSTAT_SEC_HITS     0x10    /* u_int32_t, sector hits */
                    257: #define GDT_CSTAT_SEC_MISS     0x14    /* u_int32_t, sector misses */
                    258: #define GDT_CSTAT_SZ           0x18
                    259:
                    260: /* Get cache info */
                    261: #define GDT_CINFO_CPAR         0x00
                    262: #define GDT_CINFO_CSTAT                GDT_CPAR_SZ
                    263: #define GDT_CINFO_SZ           (GDT_CPAR_SZ + GDT_CSTAT_SZ)
                    264:
                    265: /* Get board info */
                    266: #define GDT_BINFO_SER_NO       0x00    /* u_int32_t, serial number */
                    267: #define GDT_BINFO_OEM_ID       0x04    /* u_int8_t [2], OEM ID */
                    268: #define GDT_BINFO_EP_FLAGS     0x06    /* u_int16_t, eprom flags */
                    269: #define GDT_BINFO_PROC_ID      0x08    /* u_int32_t, processor ID */
                    270: #define GDT_BINFO_MEMSIZE      0x0c    /* u_int32_t, memory size (bytes) */
                    271: #define GDT_BINFO_MEM_BANKS    0x10    /* u_int8_t, memory banks */
                    272: #define GDT_BINFO_CHAN_TYPE    0x11    /* u_int8_t, channel type */
                    273: #define GDT_BINFO_CHAN_COUNT   0x12    /* u_int8_t, channel count */
                    274: #define GDT_BINFO_RDONGLE_PRES 0x13    /* u_int8_t, dongle present */
                    275: #define GDT_BINFO_EPR_FW_VER   0x14    /* u_int32_t, (eprom) firmware ver */
                    276: #define GDT_BINFO_UPD_FW_VER   0x18    /* u_int32_t, (update) firmware ver */
                    277: #define GDT_BINFO_UPD_REVISION 0x1c    /* u_int32_t, update revision */
                    278: #define GDT_BINFO_TYPE_STRING  0x20    /* char [16], controller name */
                    279: #define GDT_BINFO_RAID_STRING  0x30    /* char [16], RAID firmware name */
                    280: #define GDT_BINFO_UPDATE_PRES  0x40    /* u_int8_t, update present? */
                    281: #define GDT_BINFO_XOR_PRES     0x41    /* u_int8_t, XOR engine present */
                    282: #define GDT_BINFO_PROM_TYPE    0x42    /* u_int8_t, ROM type (eprom/flash) */
                    283: #define GDT_BINFO_PROM_COUNT   0x43    /* u_int8_t, number of ROM devices */
                    284: #define GDT_BINFO_DUP_PRES     0x44    /* u_int32_t, duplexing module pres? */
                    285: #define GDT_BINFO_CHAN_PRES    0x48    /* u_int32_t, # of exp. channels */
                    286: #define GDT_BINFO_MEM_PRES     0x4c    /* u_int32_t, memory expansion inst? */
                    287: #define GDT_BINFO_FT_BUS_SYSTEM        0x50    /* u_int8_t, fault bus supported? */
                    288: #define GDT_BINFO_SUBTYPE_VALID        0x51    /* u_int8_t, board_subtype valid */
                    289: #define GDT_BINFO_BOARD_SUBTYPE        0x52    /* u_int8_t, subtype/hardware level */
                    290: #define GDT_BINFO_RAMPAR_PRES  0x53    /* u_int8_t, RAM parity check hw? */
                    291: #define GDT_BINFO_SZ           0x54
                    292:
                    293: /* Get board features */
                    294: #define GDT_BFEAT_CHAINING     0x00    /* u_int8_t, chaining supported */
                    295: #define GDT_BFEAT_STRIPING     0x01    /* u_int8_t, striping (RAID-0) supp. */
                    296: #define GDT_BFEAT_MIRRORING    0x02    /* u_int8_t, mirroring (RAID-1) supp */
                    297: #define GDT_BFEAT_RAID         0x03    /* u_int8_t, RAID-4/5/10 supported */
                    298: #define GDT_BFEAT_SZ           0x04
                    299:
                    300: /* Other defines */
                    301: #define GDT_ASYNCINDEX 0       /* command index asynchronous event */
                    302: #define GDT_SPEZINDEX  1       /* command index unknown service */

CVSweb