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/icpreg.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: icpreg.h,v 1.7 2008/09/08 23:36:54 gmcgarry Exp $      */
    2 
    3 /*-
    4  * Copyright (c) 2002 The NetBSD Foundation, Inc.
    5  * All rights reserved.
    6  *
    7  * This code is derived from software contributed to The NetBSD Foundation
    8  * by Andrew Doran.
    9  *
   10  * Redistribution and use in source and binary forms, with or without
   11  * modification, are permitted provided that the following conditions
   12  * are met:
   13  * 1. Redistributions of source code must retain the above copyright
   14  *    notice, this list of conditions and the following disclaimer.
   15  * 2. Redistributions in binary form must reproduce the above copyright
   16  *    notice, this list of conditions and the following disclaimer in the
   17  *    documentation and/or other materials provided with the distribution.
   18  *
   19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   29  * POSSIBILITY OF SUCH DAMAGE.
   30  */
   31 
   32 /*
   33  * Copyright (c) 1999, 2000 Niklas Hallqvist.  All rights reserved.
   34  *
   35  * Redistribution and use in source and binary forms, with or without
   36  * modification, are permitted provided that the following conditions
   37  * are met:
   38  * 1. Redistributions of source code must retain the above copyright
   39  *    notice, this list of conditions and the following disclaimer.
   40  * 2. Redistributions in binary form must reproduce the above copyright
   41  *    notice, this list of conditions and the following disclaimer in the
   42  *    documentation and/or other materials provided with the distribution.
   43  * 3. All advertising materials mentioning features or use of this software
   44  *    must display the following acknowledgement:
   45  *      This product includes software developed by Niklas Hallqvist.
   46  * 4. The name of the author may not be used to endorse or promote products
   47  *    derived from this software without specific prior written permission.
   48  *
   49  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   50  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   51  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   52  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   53  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   54  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   55  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   56  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   57  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   58  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   59  *
   60  * from OpenBSD: gdtreg.h,v 1.1 2000/02/07 00:33:03 niklas Exp
   61  */
   62 
   63 #ifndef _IC_ICPREG_H_
   64 #define _IC_ICPREG_H_
   65 
   66 #define ICP_MAXBUS              6       /* XXX Why not 5? */
   67 #define ICP_MAX_LDRIVES         255     /* max logical drive count */
   68 #define ICP_MAX_HDRIVES         100     /* max host drive count */
   69 #define ICP_MAXID_FC            127     /* Fibre-channel maximum ID */
   70 #define ICP_MAXOFFSETS          128
   71 #define ICP_MAXSG               17      /* Max. s/g elements; actually 128 */
   72 #define ICP_PROTOCOL_VERSION    1
   73 #define ICP_LINUX_OS            8       /* Used for cache optimization */
   74 #define ICP_SCATTER_GATHER      1       /* s/g feature */
   75 #define ICP_SECS32              0x1f    /* round capacity */
   76 #define ICP_LOCALBOARD          0       /* Board node always 0 */
   77 #define ICP_MAX_CMDS            124
   78 #define ICP_SECTOR_SIZE         0x200   /* Always 512 bytes for cache devs */
   79 #define ICP_MAX_EVENTS          0x100   /* event buffer */
   80 
   81 /* DPMEM constants */
   82 #define ICP_MPR_MAGIC           0xc0ffee11
   83 #define ICP_IC_HEADER_BYTES     48
   84 #define ICP_IC_QUEUE_BYTES      4
   85 
   86 /* Cache/raw service commands */
   87 #define ICP_INIT        0               /* service initialization */
   88 #define ICP_READ        1               /* read command */
   89 #define ICP_WRITE       2               /* write command */
   90 #define ICP_INFO        3               /* information about devices */
   91 #define ICP_FLUSH       4               /* flush dirty cache buffers */
   92 #define ICP_IOCTL       5               /* ioctl command */
   93 #define ICP_DEVTYPE     9               /* additional information */
   94 #define ICP_MOUNT       10              /* mount cache device */
   95 #define ICP_UNMOUNT     11              /* unmount cache device */
   96 #define ICP_SET_FEAT    12              /* set features (scatter/gather) */
   97 #define ICP_GET_FEAT    13              /* get features */
   98 #define ICP_WRITE_THR   16              /* write through */
   99 #define ICP_READ_THR    17              /* read through */
  100 #define ICP_EXT_INFO    18              /* extended info */
  101 #define ICP_RESET       19              /* controller reset */
  102 #define ICP_FREEZE_IO   25              /* freeze all IOs */
  103 #define ICP_UNFREEZE_IO 26              /* unfreeze all IOs */
  104 
  105 /* Additional raw service commands */
  106 #define ICP_RESERVE     14              /* reserve device to raw service */
  107 #define ICP_RELEASE     15              /* release device */
  108 #define ICP_RESERVE_ALL 16              /* reserve all devices */
  109 #define ICP_RELEASE_ALL 17              /* release all devices */
  110 #define ICP_RESET_BUS   18              /* reset bus */
  111 #define ICP_SCAN_START  19              /* start device scan */
  112 #define ICP_SCAN_END    20              /* stop device scan */
  113 
  114 /* IOCTL command defines */
  115 #define ICP_SCSI_DR_INFO        0x00    /* SCSI drive info */
  116 #define ICP_SCSI_CHAN_CNT       0x05    /* SCSI channel count */
  117 #define ICP_SCSI_DR_LIST        0x06    /* SCSI drive list */
  118 #define ICP_SCSI_DEF_CNT        0x15    /* grown/primary defects */
  119 #define ICP_DSK_STATISTICS      0x4b    /* SCSI disk statistics */
  120 #define ICP_IOCHAN_DESC         0x5d    /* description of IO channel */
  121 #define ICP_IOCHAN_RAW_DESC     0x5e    /* description of raw IO channel */
  122 
  123 #define ICP_L_CTRL_PATTERN      0x20000000      /* SCSI IOCTL mask */
  124 #define ICP_ARRAY_INFO          0x12            /* array drive info */
  125 #define ICP_ARRAY_DRV_LIST      0x0f            /* array drive list */
  126 #define ICP_LA_CTRL_PATTERN     0x10000000      /* array IOCTL mask */
  127 #define ICP_CACHE_DRV_CNT       0x01            /* cache drive count */
  128 #define ICP_CACHE_DRV_LIST      0x02            /* cache drive list */
  129 #define ICP_CACHE_INFO          0x04            /* cache info */
  130 #define ICP_CACHE_CONFIG        0x05            /* cache configuration */
  131 #define ICP_CACHE_DRV_INFO      0x07            /* cache drive info */
  132 #define ICP_BOARD_FEATURES      0x15            /* controller features */
  133 #define ICP_BOARD_INFO          0x28            /* controller info */
  134 #define ICP_HOST_GET            0x10001         /* get host drive list */
  135 #define ICP_IO_CHANNEL          0x20000         /* default IO channel */
  136 #define ICP_INVALID_CHANNEL     0xffff          /* invalid channel */
  137 
  138 /* Service errors */
  139 #define ICP_S_MSG_REQUEST       0       /* screen service: async evt message */
  140 #define ICP_S_OK                1       /* no error */
  141 #define ICP_S_BSY               7       /* controller busy */
  142 #define ICP_S_RAW_SCSI          12      /* raw service: target error */
  143 #define ICP_S_RAW_ILL           0xff    /* raw service: illegal */
  144 #define ICP_S_NO_STATUS         0x1000  /* got no status (driver-generated) */
  145 
  146 /* Controller services */
  147 #define ICP_SCSIRAWSERVICE      3
  148 #define ICP_CACHESERVICE        9
  149 #define ICP_SCREENSERVICE       11
  150 
  151 /* Data direction raw service. */
  152 #define ICP_DATA_IN             0x01000000
  153 #define ICP_DATA_OUT            0x00000000
  154 
  155 /* Command queue entries */
  156 #define ICP_OFFSET      0x00    /* u_int16_t, command offset in the DP RAM */
  157 #define ICP_SERV_ID     0x02    /* u_int16_t, service */
  158 #define ICP_COMM_Q_SZ   0x04
  159 
  160 /* Interface area */
  161 #define ICP_S_CMD_INDX  0x00    /* u_int8_t, special command */
  162 #define ICP_S_STATUS    0x01    /* volatile u_int8_t, status special command */
  163 #define ICP_S_INFO      0x04    /* u_int32_t [4], add. info special command */
  164 #define ICP_SEMA0       0x14    /* volatile u_int8_t, command semaphore */
  165 #define ICP_CMD_INDEX   0x18    /* u_int8_t, command number */
  166 #define ICP_STATUS      0x1c    /* volatile u_int16_t, command status */
  167 #define ICP_SERVICE     0x1e    /* u_int16_t, service (for asynch. events) */
  168 #define ICP_DPR_INFO    0x20    /* u_int32_t [2], additional info */
  169 #define ICP_COMM_QUEUE  0x28    /* command queue */
  170 #define ICP_DPR_CMD     (0x30 + ICP_MAXOFFSETS * ICP_COMM_Q_SZ)
  171                                 /* u_int8_t [], commands */
  172 #define ICP_DPR_IF_SZ   ICP_DPR_CMD
  173 
  174 /* Get cache info */
  175 #define ICP_CINFO_CPAR          0x00
  176 #define ICP_CINFO_CSTAT         0x0c
  177 
  178 /* Other defines */
  179 #define ICP_ASYNCINDEX  0       /* command index asynchronous event */
  180 #define ICP_SPEZINDEX   1       /* command index unknown service */
  181 
  182 /* I/O channel header */
  183 struct icp_ioc_version {
  184         u_int32_t       iv_version;     /* version (~0: newest) */
  185         u_int8_t        iv_listents;    /* list entry count */
  186         u_int8_t        iv_firstchan;   /* first channel number */
  187         u_int8_t        iv_lastchan;    /* last channel number */
  188         u_int8_t        iv_chancount;   /* channel count */
  189         u_int32_t       iv_listoffset;  /* offset of list[0] */
  190 } __packed;
  191 
  192 #define ICP_IOC_NEWEST  0xffffffff
  193 
  194 /* Get I/O channel description */
  195 struct icp_ioc {
  196         u_int32_t       io_addr;        /* channel address */
  197         u_int8_t        io_type;        /* type (SCSI/FCAL) */
  198         u_int8_t        io_localno;     /* local number */
  199         u_int16_t       io_features;    /* channel features */
  200 } __packed;
  201 
  202 /* Get raw I/O channel description */
  203 struct icp_rawioc {
  204         u_int8_t        ri_procid;      /* processor ID */
  205         u_int8_t        ri_defect;      /* defect? */
  206         u_int16_t       ri_padding;
  207 } __packed;
  208 
  209 /* Get SCSI channel count */
  210 struct icp_getch {
  211         u_int32_t       gc_channo;      /* channel number */
  212         u_int32_t       gc_drivecnt;    /* drive count */
  213         u_int8_t        gc_scsiid;      /* SCSI initiator ID */
  214         u_int8_t        gc_scsistate;   /* SCSI processor state */
  215 } __packed;
  216 
  217 /* Cache info/config IOCTL structures */
  218 struct icp_cpar {
  219         u_int32_t       cp_version;     /* firmware version */
  220         u_int16_t       cp_state;       /* cache state (on/off) */
  221         u_int16_t       cp_strategy;    /* cache strategy */
  222         u_int16_t       cp_write_back;  /* write back (on/off) */
  223         u_int16_t       cp_block_size;  /* cache block size */
  224 } __packed;
  225 
  226 struct icp_cstat {
  227         u_int32_t       cs_size;        /* cache size */
  228         u_int32_t       cs_readcnt;     /* read counter */
  229         u_int32_t       cs_writecnt;    /* write counter */
  230         u_int32_t       cs_trhits;      /* track hits */
  231         u_int32_t       cs_sechits;     /* sector hits */
  232         u_int32_t       cs_secmiss;     /* sector misses */
  233 } __packed;
  234 
  235 /* Board information. */
  236 struct icp_binfo {
  237         u_int32_t       bi_ser_no;              /* serial number */
  238         u_int8_t        bi_oem_id[2];           /* OEM ID */
  239         u_int16_t       bi_ep_flags;            /* eprom flags */
  240         u_int32_t       bi_proc_id;             /* processor ID */
  241         u_int32_t       bi_memsize;             /* memory size (bytes) */
  242         u_int8_t        bi_mem_banks;           /* memory banks */
  243         u_int8_t        bi_chan_type;           /* channel type */
  244         u_int8_t        bi_chan_count;          /* channel count */
  245         u_int8_t        bi_rdongle_pres;        /* dongle present */
  246         u_int32_t       bi_epr_fw_ver;          /* (eprom) firmware ver */
  247         u_int32_t       bi_upd_fw_ver;          /* (update) firmware ver */
  248         u_int32_t       bi_upd_revision;        /* update revision */
  249         char            bi_type_string[16];     /* char controller name */
  250         char            bi_raid_string[16];     /* char RAID firmware name */
  251         u_int8_t        bi_update_pres;         /* update present? */
  252         u_int8_t        bi_xor_pres;            /* XOR engine present */
  253         u_int8_t        bi_prom_type;           /* ROM type (eprom/flash) */
  254         u_int8_t        bi_prom_count;          /* number of ROM devices */
  255         u_int32_t       bi_dup_pres;            /* duplexing module pres? */
  256         u_int32_t       bi_chan_pres;           /* # of exp. channels */
  257         u_int32_t       bi_mem_pres;            /* memory expansion inst? */
  258         u_int8_t        bi_ft_bus_system;       /* fault bus supported? */
  259         u_int8_t        bi_subtype_valid;       /* board_subtype valid */
  260         u_int8_t        bi_board_subtype;       /* subtype/hardware level */
  261         u_int8_t        bi_rampar_pres;         /* RAM parity check hw? */
  262 } __packed;
  263 
  264 /* Board features. */
  265 struct icp_bfeat {
  266         u_int8_t        bf_chaining;    /* chaining supported */
  267         u_int8_t        bf_striping;    /* striping (RAID-0) supported */
  268         u_int8_t        bf_mirroring;   /* mirroring (RAID-1) supported */
  269         u_int8_t        bf_raid;        /* RAID-4/5/10 supported */
  270 } __packed;
  271 
  272 /* Cache drive information. */
  273 struct icp_cdevinfo {
  274         char            cd_name[8];
  275         u_int32_t       cd_devtype;
  276         u_int32_t       cd_ldcnt;
  277         u_int32_t       cd_last_error;
  278         u_int8_t        cd_initialized;
  279         u_int8_t        cd_removable;
  280         u_int8_t        cd_write_protected;
  281         u_int8_t        cd_flags;
  282         u_int32_t       ld_blkcnt;
  283         u_int32_t       ld_blksize;
  284         u_int32_t       ld_dcnt;
  285         u_int32_t       ld_slave;
  286         u_int32_t       ld_dtype;
  287         u_int32_t       ld_last_error;
  288         char            ld_name[8];
  289         u_int8_t        ld_error;
  290 } __packed;
  291 
  292 struct icp_sg {
  293         u_int32_t       sg_addr;
  294         u_int32_t       sg_len;
  295 } __packed;
  296 
  297 struct icp_cachecmd {
  298         u_int16_t       cc_deviceno;
  299         u_int32_t       cc_blockno;
  300         u_int32_t       cc_blockcnt;
  301         u_int32_t       cc_addr;                /* ~0 == s/g */
  302         u_int32_t       cc_nsgent;
  303         struct icp_sg   cc_sg[ICP_MAXSG];
  304 } __packed;
  305 
  306 struct icp_ioctlcmd {
  307         u_int16_t       ic_bufsize;
  308         u_int32_t       ic_subfunc;
  309         u_int32_t       ic_channel;
  310         u_int32_t       ic_addr;
  311 } __packed;
  312 
  313 struct icp_screencmd {
  314         u_int32_t       sc_msghandle;
  315         u_int32_t       sc_msgaddr;
  316 } __packed;
  317 
  318 struct icp_rawcmd {
  319         u_int16_t       rc_padding0;            /* unused */
  320         u_int32_t       rc_direction;           /* data direction */
  321         u_int32_t       rc_mdisc_time;          /* disc. time (0: none) */
  322         u_int32_t       rc_mcon_time;           /* conn. time (0: none) */
  323         u_int32_t       rc_sdata;               /* dest address */
  324         u_int32_t       rc_sdlen;               /* data length */
  325         u_int32_t       rc_clen;                /* CDB length */
  326         u_int8_t        rc_cdb[12];             /* SCSI CDB */
  327         u_int8_t        rc_target;              /* target ID */
  328         u_int8_t        rc_lun;                 /* LUN */
  329         u_int8_t        rc_bus;                 /* channel */
  330         u_int8_t        rc_priority;            /* priority; 0 only */
  331         u_int32_t       rc_sense_len;           /* sense length */
  332         u_int32_t       rc_sense_addr;          /* sense address */
  333         u_int32_t       rc_padding1;            /* unused */
  334         u_int32_t       rc_nsgent;              /* s/g element count */
  335         struct icp_sg   rc_sg[ICP_MAXSG];       /* s/g list */
  336 } __packed;
  337 
  338 struct icp_cmdhdr {
  339         u_int32_t       cmd_boardnode;          /* always 0 */
  340         u_int32_t       cmd_cmdindex;           /* command identifier */
  341         u_int16_t       cmd_opcode;
  342 } __packed;
  343 
  344 struct icp_cmd {
  345         u_int32_t       cmd_boardnode;          /* always 0 */
  346         u_int32_t       cmd_cmdindex;           /* command identifier */
  347         u_int16_t       cmd_opcode;
  348 
  349         union {
  350                 struct icp_rawcmd       rc;
  351                 struct icp_screencmd    sc;
  352                 struct icp_ioctlcmd     ic;
  353                 struct icp_cachecmd     cc;
  354         } cmd_packet;
  355 } __packed;
  356 
  357 #endif  /* !_IC_ICPREG_H_ */

Cache object: 3a9784d0eb557573339b579a1f7526dd


[ 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.