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