The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/ic/cissreg.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: cissreg.h,v 1.1.4.2 2006/04/08 23:31:38 tron Exp $     */
    2 /*      $OpenBSD: cissreg.h,v 1.4 2005/12/13 15:55:59 brad Exp $        */
    3 
    4 /*
    5  * Copyright (c) 2005 Michael Shalayeff
    6  * All rights reserved.
    7  *
    8  * Permission to use, copy, modify, and distribute this software for any
    9  * purpose with or without fee is hereby granted, provided that the above
   10  * copyright notice and this permission notice appear in all copies.
   11  *
   12  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
   13  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   14  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   15  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   16  * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER IN
   17  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
   18  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   19  */
   20 
   21 #define CISS_IDB        0x20
   22 #define CISS_IDB_CFG    0x01
   23 #define CISS_ISR        0x30
   24 #define CISS_IMR        0x34
   25 #define CISS_READYENAB  4
   26 #define CISS_READYENA   8
   27 #define CISS_INQ        0x40
   28 #define CISS_OUTQ       0x44
   29 #define CISS_CFG_BAR    0xb4
   30 #define CISS_CFG_OFF    0xb8
   31 
   32 #define CISS_DRVMAP_SIZE        (128 / 8)
   33 
   34 #define CISS_CMD_CTRL_GET       0x26
   35 #define CISS_CMD_CTRL_SET       0x27
   36 /* sub-commands for GET/SET */
   37 #define CISS_CMS_CTRL_LDID      0x10
   38 #define CISS_CMS_CTRL_CTRL      0x11
   39 #define CISS_CMS_CTRL_LDSTAT    0x12
   40 #define CISS_CMS_CTRL_PDID      0x15
   41 #define CISS_CMS_CTRL_PDBLINK   0x16
   42 #define CISS_CMS_CTRL_PDBLSENS  0x17
   43 #define CISS_CMS_CTRL_FLUSH     0xc2
   44 #define CISS_CMS_CTRL_ACCEPT    0xe0
   45 
   46 #define CISS_CMD_LDMAP  0xc2
   47 #define CISS_CMD_PDMAP  0xc3
   48 
   49 struct ciss_softc;
   50 
   51 struct ciss_config {
   52         u_int32_t       signature;
   53 #define CISS_SIGNATURE  (*(const u_int32_t *)"CISS")
   54         u_int32_t       version;
   55         u_int32_t       methods;
   56 #define CISS_METH_READY 0x0001
   57 #define CISS_METH_SIMPL 0x0002
   58 #define CISS_METH_PERF  0x0004
   59 #define CISS_METH_EMQ   0x0008
   60         u_int32_t       amethod;
   61         u_int32_t       rmethod;
   62         u_int32_t       paddr_lim;
   63         u_int32_t       int_delay;
   64         u_int32_t       int_count;
   65         u_int32_t       maxcmd;
   66         u_int32_t       scsibus;
   67 #define CISS_BUS_U2     0x0001
   68 #define CISS_BUS_U3     0x0002
   69 #define CISS_BUS_FC1    0x0100
   70 #define CISS_BUS_FC2    0x0200
   71         u_int32_t       troff;
   72         u_int8_t        hostname[16];
   73         u_int32_t       heartbeat;
   74         u_int32_t       driverf;
   75 #define CISS_DRV_UATT   0x0001
   76 #define CISS_DRV_QINI   0x0002
   77 #define CISS_DRV_LCKINT 0x0004
   78 #define CISS_DRV_QTAGS  0x0008
   79 #define CISS_DRV_ALPHA  0x0010
   80 #define CISS_DRV_LUNS   0x0020
   81 #define CISS_DRV_MSGRQ  0x0080
   82 #define CISS_DRV_DBRD   0x0100
   83 #define CISS_DRV_PRF    0x0200
   84         u_int32_t       maxsg;
   85 } __packed;
   86 
   87 struct ciss_inquiry {
   88         u_int8_t        numld;
   89         u_int8_t        sign[4];
   90         u_int8_t        fw_running[4];
   91         u_int8_t        fw_stored[4];
   92         u_int8_t        hw_rev;
   93         u_int8_t        resv0[12];
   94         u_int16_t       pci_vendor;
   95         u_int16_t       pci_product;
   96         u_int8_t        resv1[10];
   97         u_int8_t        market_rev;
   98         u_int8_t        flags;
   99 #define CISS_INQ_WIDE   0x08
  100 #define CISS_INQ_BIGMAP 0x80
  101 #define CISS_INQ_BITS   "\020\04WIDE\010BIGMAP"
  102         u_int8_t        resv2[2];
  103         u_int8_t        nscsi_bus;
  104         u_int8_t        resv3[4];
  105         u_int8_t        clk[4];         /* unaligned dumbness */
  106         u_int8_t        buswidth;
  107         u_int8_t        disks[CISS_DRVMAP_SIZE];
  108         u_int8_t        extdisks[CISS_DRVMAP_SIZE];
  109         u_int8_t        nondisks[CISS_DRVMAP_SIZE];
  110 } __packed;
  111 
  112 struct ciss_ldmap {
  113         u_int32_t       size;
  114         u_int32_t       resv;
  115         struct {
  116                 u_int32_t tgt;
  117                 u_int32_t tgt2;
  118         } map[1];
  119 } __packed;
  120 
  121 struct ciss_flush {
  122         u_int16_t       flush;
  123 #define CISS_FLUSH_ENABLE       0
  124 #define CISS_FLUSH_DISABLE      1
  125         u_int16_t       resv[255];
  126 } __packed;
  127 
  128 struct ciss_cmd {
  129         u_int8_t        resv0;  /* 00 */
  130         u_int8_t        sgin;   /* 01: #sg in the cmd */
  131         u_int16_t       sglen;  /* 02: #sg total */
  132         u_int32_t       id;     /* 04: cmd id << 2 and status bits */
  133 #define CISS_CMD_ERR    0x02
  134         u_int32_t       id_hi;  /* 08: not used */
  135         u_int32_t       tgt;    /* 0c: tgt:bus:mode or lun:mode */
  136 #define CISS_CMD_MODE_PERIPH    0x00000000
  137 #define CISS_CMD_MODE_LD        0x40000000
  138 #define CISS_CMD_TGT_MASK       0x40ffffff
  139 #define CISS_CMD_BUS_MASK       0x3f000000
  140 #define CISS_CMD_BUS_SHIFT      24
  141         u_int32_t       tgt2;   /* 10: scsi-3 address bytes */
  142 
  143         u_int8_t        cdblen; /* 14: valid length of cdb */
  144         u_int8_t        flags;  /* 15 */
  145 #define CISS_CDB_CMD    0x00
  146 #define CISS_CDB_MSG    0x01
  147 #define CISS_CDB_NOTAG  0x00
  148 #define CISS_CDB_SIMPL  0x20
  149 #define CISS_CDB_QHEAD  0x28
  150 #define CISS_CDB_ORDR   0x30
  151 #define CISS_CDB_AUTO   0x38
  152 #define CISS_CDB_IN     0x80
  153 #define CISS_CDB_OUT    0x40
  154         u_int16_t       tmo;    /* 16: timeout in seconds */
  155 #define CISS_MAX_CDB    12
  156         u_int8_t        cdb[16];/* 18 */
  157 
  158         u_int64_t       err_pa; /* 28: pa(struct ciss_error *) */
  159         u_int32_t       err_len;/* 30 */
  160 
  161         struct {                /* 34 */
  162                 u_int32_t       addr_lo;
  163                 u_int32_t       addr_hi;
  164                 u_int32_t       len;
  165                 u_int32_t       flags;
  166 #define CISS_SG_EXT     0x0001
  167         } sgl[1];
  168 } __packed;
  169 
  170 struct ciss_error {
  171         u_int8_t        scsi_stat;      /* SCSI_OK etc */
  172         u_int8_t        senselen;
  173         u_int16_t       cmd_stat;
  174 #define CISS_ERR_OK     0
  175 #define CISS_ERR_TGTST  1       /* target status */
  176 #define CISS_ERR_UNRUN  2
  177 #define CISS_ERR_OVRUN  3
  178 #define CISS_ERR_INVCMD 4
  179 #define CISS_ERR_PROTE  5
  180 #define CISS_ERR_HWERR  6
  181 #define CISS_ERR_CLOSS  7
  182 #define CISS_ERR_ABRT   8
  183 #define CISS_ERR_FABRT  9
  184 #define CISS_ERR_UABRT  10
  185 #define CISS_ERR_TMO    11
  186 #define CISS_ERR_NABRT  12
  187         u_int32_t       resid;
  188         u_int8_t        err_type[4];
  189         u_int32_t       err_info;
  190         u_int8_t        sense[32];
  191 } __packed;
  192 
  193 struct ciss_ccb {
  194         TAILQ_ENTRY(ciss_ccb)   ccb_link;
  195         struct ciss_softc       *ccb_sc;
  196         paddr_t                 ccb_cmdpa;
  197         enum {
  198                 CISS_CCB_FREE   = 0x01,
  199                 CISS_CCB_READY  = 0x02,
  200                 CISS_CCB_ONQ    = 0x04,
  201                 CISS_CCB_PREQ   = 0x08,
  202                 CISS_CCB_POLL   = 0x10,
  203                 CISS_CCB_FAIL   = 0x80
  204 #define CISS_CCB_BITS   "\020\01FREE\02READY\03ONQ\04PREQ\05POLL\010FAIL"
  205         } ccb_state;
  206 
  207         struct scsipi_xfer      *ccb_xs;
  208         size_t                  ccb_len;
  209         void                    *ccb_data;
  210         bus_dmamap_t            ccb_dmamap;
  211 
  212         struct ciss_error       ccb_err;
  213         struct ciss_cmd         ccb_cmd;        /* followed by sgl */
  214 };
  215 
  216 typedef TAILQ_HEAD(ciss_queue_head, ciss_ccb)     ciss_queue_head;
  217 

Cache object: e8ae126d8d5e3d2cde7b9f2c134956fd


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.