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

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

1.1       nbrk        1: /*     $OpenBSD: siopreg.h,v 1.11 2007/08/05 19:05:09 kettenis Exp $ */
                      2: /*     $NetBSD: siopreg.h,v 1.16 2005/02/27 00:27:02 perry Exp $       */
                      3:
                      4: /*
                      5:  * Copyright (c) 2000 Manuel Bouyer.
                      6:  *
                      7:  * Redistribution and use in source and binary forms, with or without
                      8:  * modification, are permitted provided that the following conditions
                      9:  * are met:
                     10:  * 1. Redistributions of source code must retain the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer.
                     12:  * 2. Redistributions in binary form must reproduce the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer in the
                     14:  *    documentation and/or other materials provided with the distribution.
                     15:  * 3. All advertising materials mentioning features or use of this software
                     16:  *    must display the following acknowledgement:
                     17:  *     This product includes software developed by Manuel Bouyer.
                     18:  * 4. The name of the author may not be used to endorse or promote products
                     19:  *    derived from this software without specific prior written permission.
                     20:  *
                     21:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     22:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     23:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     24:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     25:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     26:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     27:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     28:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     29:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     30:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     31:  *
                     32:  */
                     33:
                     34: /*
                     35:  * Devices definitions for Symbios/NCR M53c8xx PCI-SCSI I/O Processors
                     36:  * Docs available from http://www.symbios.com/
                     37:  */
                     38:
                     39: #define SIOP_SCNTL0    0x00 /* SCSI control 0, R/W */
                     40: #define SCNTL0_ARB_MASK        0xc0
                     41: #define SCNTL0_SARB    0x00
                     42: #define SCNTL0_FARB    0xc0
                     43: #define SCNTL0_START   0x20
                     44: #define SCNTL0_WATM    0x10
                     45: #define SCNTL0_EPC     0x08
                     46: #define SCNTL0_AAP     0x02
                     47: #define SCNTL0_TRG     0x01
                     48:
                     49: #define SIOP_SCNTL1    0x01 /* SCSI control 1, R/W */
                     50: #define SCNTL1_EXC     0x80
                     51: #define SCNTL1_ADB     0x40
                     52: #define SCNTL1_DHP     0x20
                     53: #define SCNTL1_CON     0x10
                     54: #define SCNTL1_RST     0x08
                     55: #define SCNTL1_AESP    0x04
                     56: #define SCNTL1_IARB    0x02
                     57: #define SCNTL1_SST     0x01
                     58:
                     59: #define SIOP_SCNTL2    0x02 /* SCSI control 2, R/W */
                     60: #define SCNTL2_SDU     0x80
                     61: #define SCNTL2_CHM     0x40    /* 875 only */
                     62: #define SCNTL2_SLPMD   0x20    /* 875 only */
                     63: #define SCNTL2_SLPHBEN 0x10    /* 875 only */
                     64: #define SCNTL2_WSS     0x08    /* 875 only */
                     65: #define SCNTL2_VUE0    0x04    /* 875 only */
                     66: #define SCNTL2_VUE1    0x02    /* 875 only */
                     67: #define SCNTL2_WSR     0x01    /* 875 only */
                     68:
                     69: #define SIOP_SCNTL3    0x03 /* SCSI control 3, R/W */
                     70: #define SCNTL3_ULTRA   0x80    /* 875 only */
                     71: #define SCNTL3_SCF_SHIFT 4
                     72: #define SCNTL3_SCF_MASK        0x70
                     73: #define SCNTL3_EWS     0x08    /* 875 only */
                     74: #define SCNTL3_CCF_SHIFT 0
                     75: #define SCNTL3_CCF_MASK        0x07
                     76:
                     77: /* periods for various SCF values, assume transfer period of 4 */
                     78: struct scf_period {
                     79:        int clock; /* clock period (ns * 10) */
                     80:        int period; /* scsi period, as set in the SDTR message */
                     81:        int scf; /* scf value to use */
                     82: };
                     83:
                     84: #ifdef SIOP_NEEDS_PERIOD_TABLES
                     85: static const struct scf_period scf_period[] = {
                     86:        {250, 25, 1}, /* 10.0 MHz */
                     87:        {250, 37, 2}, /* 6.67 MHz */
                     88:        {250, 50, 3},  /* 5.00 MHz */
                     89:        {250, 75, 4},  /* 3.33 MHz */
                     90:        {125, 12, 1},  /* 20.0 MHz */
                     91:        {125, 18, 2},  /* 13.3 MHz */
                     92:        {125, 25, 3},  /* 10.0 MHz */
                     93:        {125, 37, 4},  /* 6.67 MHz */
                     94:        {125, 50, 5},  /* 5.0 MHz */
                     95:        { 62, 10, 1},  /* 40.0 MHz */
                     96:        { 62, 12, 3},  /* 20.0 MHz */
                     97:        { 62, 18, 4},  /* 13.3 MHz */
                     98:        { 62, 25, 5},  /* 10.0 MHz */
                     99: };
                    100:
                    101: static const struct scf_period dt_scf_period[] = {
                    102:        { 62,  9, 1},  /* 80.0 MHz */
                    103:        { 62, 10, 3},  /* 40.0 MHz */
                    104:        { 62, 12, 5},  /* 20.0 MHz */
                    105:        { 62, 18, 6},  /* 13.3 MHz */
                    106:        { 62, 25, 7},  /* 10.0 MHz */
                    107: };
                    108: #endif
                    109:
                    110: #define SIOP_SCID      0x04 /* SCSI chip ID R/W */
                    111: #define SCID_RRE       0x40
                    112: #define SCID_SRE       0x20
                    113: #define SCID_ENCID_SHIFT 0
                    114: #define SCID_ENCID_MASK        0x07
                    115:
                    116: #define SIOP_SXFER     0x05 /* SCSI transfer, R/W */
                    117: #define SXFER_TP_SHIFT  5
                    118: #define SXFER_TP_MASK  0xe0
                    119: #define SXFER_MO_SHIFT  0
                    120: #define SXFER_MO_MASK  0x3f
                    121:
                    122: #define SIOP_SDID      0x06 /* SCSI destination ID, R/W */
                    123: #define SDID_ENCID_SHIFT 0
                    124: #define SDID_ENCID_MASK        0x07
                    125:
                    126: #define SIOP_GPREG     0x07 /* General purpose, R/W */
                    127: #define GPREG_GPIO4    0x10    /* 875 only */
                    128: #define GPREG_GPIO3    0x08    /* 875 only */
                    129: #define GPREG_GPIO2    0x04    /* 875 only */
                    130: #define GPREG_GPIO1    0x02
                    131: #define GPREG_GPIO0    0x01
                    132:
                    133: #define SIOP_SFBR      0x08 /* SCSI first byte received, R/W */
                    134:
                    135: #define SIOP_SOCL      0x09 /* SCSI output control latch, RW */
                    136:
                    137: #define SIOP_SSID      0x0A /* SCSI selector ID, RO */
                    138: #define SSID_VAL       0x80
                    139: #define SSID_ENCID_SHIFT 0
                    140: #define SSID_ENCID_MASK 0x0f
                    141:
                    142: #define SIOP_SBCL      0x0B /* SCSI control line, RO */
                    143:
                    144: #define SIOP_DSTAT     0x0C /* DMA status, RO */
                    145: #define DSTAT_DFE      0x80
                    146: #define DSTAT_MDPE     0x40
                    147: #define DSTAT_BF       0x20
                    148: #define DSTAT_ABRT     0x10
                    149: #define DSTAT_SSI      0x08
                    150: #define DSTAT_SIR      0x04
                    151: #define DSTAT_IID      0x01
                    152:
                    153: #define SIOP_SSTAT0    0x0D /* STSI status 0, RO */
                    154: #define SSTAT0_ILF     0x80
                    155: #define SSTAT0_ORF     0x40
                    156: #define SSTAT0_OLF     0x20
                    157: #define SSTAT0_AIP     0x10
                    158: #define SSTAT0_LOA     0x08
                    159: #define SSTAT0_WOA     0x04
                    160: #define SSTAT0_RST     0x02
                    161: #define SSTAT0_SDP     0x01
                    162:
                    163: #define SIOP_SSTAT1    0x0E /* STSI status 1, RO */
                    164: #define SSTAT1_FFO_SHIFT 4
                    165: #define SSTAT1_FFO_MASK 0x80
                    166: #define SSTAT1_SDPL    0x08
                    167: #define SSTAT1_MSG     0x04
                    168: #define SSTAT1_CD      0x02
                    169: #define SSTAT1_IO      0x01
                    170: #define SSTAT1_PHASE_MASK (SSTAT1_IO | SSTAT1_CD | SSTAT1_MSG)
                    171: #define SSTAT1_PHASE_DATAOUT   0
                    172: #define SSTAT1_PHASE_DATAIN    SSTAT1_IO
                    173: #define SSTAT1_PHASE_CMD       SSTAT1_CD
                    174: #define SSTAT1_PHASE_STATUS    (SSTAT1_CD | SSTAT1_IO)
                    175: #define SSTAT1_PHASE_MSGOUT    (SSTAT1_MSG | SSTAT1_CD)
                    176: #define SSTAT1_PHASE_MSGIN     (SSTAT1_MSG | SSTAT1_CD | SSTAT1_IO)
                    177:
                    178: #define SIOP_SSTAT2    0x0F /* STSI status 2, RO */
                    179: #define SSTAT2_ILF1    0x80    /* 875 only */
                    180: #define SSTAT2_ORF1    0x40    /* 875 only */
                    181: #define SSTAT2_OLF1    0x20    /* 875 only */
                    182: #define SSTAT2_FF4     0x10    /* 875 only */
                    183: #define SSTAT2_SPL1    0x08    /* 875 only */
                    184: #define SSTAT2_DF      0x04    /* 875 only */
                    185: #define SSTAT2_LDSC    0x02
                    186: #define SSTAT2_SDP1    0x01    /* 875 only */
                    187:
                    188: #define SIOP_DSA       0x10 /* data struct addr, R/W */
                    189:
                    190: #define SIOP_ISTAT     0x14 /* IRQ status, R/W */
                    191: #define ISTAT_ABRT     0x80
                    192: #define ISTAT_SRST     0x40
                    193: #define ISTAT_SIGP     0x20
                    194: #define ISTAT_SEM      0x10
                    195: #define ISTAT_CON      0x08
                    196: #define ISTAT_INTF     0x04
                    197: #define ISTAT_SIP      0x02
                    198: #define ISTAT_DIP      0x01
                    199:
                    200: #define SIOP_CTEST0    0x18 /* Chip test 0, R/W */
                    201: #define CTEST0_EHP     0x04    /* 720/770 */
                    202:
                    203: #define SIOP_CTEST1    0x19 /* Chip test 1, R/W */
                    204:
                    205: #define SIOP_CTEST2    0x1A /* Chip test 2, R/W */
                    206: #define CTEST2_SRTCH   0x04    /* 875 only */
                    207:
                    208: #define SIOP_CTEST3    0x1B /* Chip test 3, R/W */
                    209: #define CTEST3_FLF     0x08
                    210: #define CTEST3_CLF     0x04
                    211: #define CTEST3_FM      0x02
                    212: #define CTEST3_WRIE    0x01
                    213:
                    214: #define SIOP_TEMP      0x1C /* Temp register (used by CALL/RET), R/W */
                    215:
                    216: #define SIOP_DFIFO     0x20 /* DMA FIFO */
                    217:
                    218: #define SIOP_CTEST4    0x21 /* Chip test 4, R/W */
                    219: #define CTEST4_MUX     0x80    /* 720/770 */
                    220: #define CTEST4_BDIS    0x80
                    221: #define CTEST_ZMOD     0x40
                    222: #define CTEST_ZSD      0x20
                    223: #define CTEST_SRTM     0x10
                    224: #define CTEST_MPEE     0x08
                    225:
                    226: #define SIOP_CTEST5    0x22 /* Chip test 5, R/W */
                    227: #define CTEST5_ADCK    0x80
                    228: #define CTEST5_BBCK    0x40
                    229: #define CTEST5_DFS     0x20
                    230: #define CTEST5_MASR    0x10
                    231: #define CTEST5_DDIR    0x08
                    232: #define CTEST5_BOMASK  0x03
                    233:
                    234: #define SIOP_CTEST6    0x23 /* Chip test 6, R/W */
                    235:
                    236: #define SIOP_DBC       0x24 /* DMA byte counter, R/W */
                    237:
                    238: #define SIOP_DCMD      0x27 /* DMA command, R/W */
                    239:
                    240: #define SIOP_DNAD      0x28 /* DMA next addr, R/W */
                    241:
                    242: #define SIOP_DSP       0x2C /* DMA scripts pointer, R/W */
                    243:
                    244: #define SIOP_DSPS      0x30 /* DMA scripts pointer save, R/W */
                    245:
                    246: #define SIOP_SCRATCHA  0x34 /* scratch register A. R/W */
                    247:
                    248: #define SIOP_DMODE     0x38 /* DMA mode, R/W */
                    249: #define DMODE_BL_SHIFT   6
                    250: #define DMODE_BL_MASK  0xC0
                    251: #define DMODE_SIOM     0x20
                    252: #define DMODE_DIOM     0x10
                    253: #define DMODE_ERL      0x08
                    254: #define DMODE_ERMP     0x04
                    255: #define DMODE_BOF      0x02
                    256: #define DMODE_MAN      0x01
                    257:
                    258: #define SIOP_DIEN      0x39 /* DMA interrupt enable, R/W */
                    259: #define DIEN_MDPE      0x40
                    260: #define DIEN_BF                0x20
                    261: #define DIEN_AVRT      0x10
                    262: #define DIEN_SSI       0x08
                    263: #define DIEN_SIR       0x04
                    264: #define DIEN_IID       0x01
                    265:
                    266: #define SIOP_SBR       0x3A /* scratch byte register, R/W */
                    267:
                    268: #define SIOP_DCNTL     0x3B /* DMA control, R/W */
                    269: #define DCNTL_CLSE     0x80
                    270: #define DCNTL_PFF      0x40
                    271: #define DCNTL_EA       0x20    /* 720/770 */
                    272: #define DCNTL_PFEN     0x20    /* 8xx */
                    273: #define DCNTL_SSM      0x10
                    274: #define DCNTL_IRQM     0x08
                    275: #define DCNTL_STD      0x04
                    276: #define DCNTL_IRQD     0x02
                    277: #define DCNTL_COM      0x01
                    278:
                    279: #define SIOP_ADDER     0x3C /* adder output sum, RO */
                    280:
                    281: #define SIOP_SIEN0     0x40 /* SCSI interrupt enable 0, R/W */
                    282: #define SIEN0_MA       0x80
                    283: #define SIEN0_CMP      0x40
                    284: #define SIEN0_SEL      0x20
                    285: #define SIEN0_RSL      0x10
                    286: #define SIEN0_SGE      0x08
                    287: #define SIEN0_UDC      0x04
                    288: #define SIEN0_SRT      0x02
                    289: #define SIEN0_PAR      0x01
                    290:
                    291: #define SIOP_SIEN1     0x41 /* SCSI interrupt enable 1, R/W */
                    292: #define SIEN1_SBMC     0x10 /* 895 only */
                    293: #define SIEN1_STO      0x04
                    294: #define SIEN1_GEN      0x02
                    295: #define SIEN1_HTH      0x01
                    296:
                    297: #define SIOP_SIST0     0x42 /* SCSI interrupt status 0, RO */
                    298: #define SIST0_MA       0x80
                    299: #define SIST0_CMP      0x40
                    300: #define SIST0_SEL      0x20
                    301: #define SIST0_RSL      0x10
                    302: #define SIST0_SGE      0x08
                    303: #define SIST0_UDC      0x04
                    304: #define SIST0_RST      0x02
                    305: #define SIST0_PAR      0x01
                    306:
                    307: #define SIOP_SIST1     0x43 /* SCSI interrupt status 1, RO */
                    308: #define SIST1_SBMC     0x10 /* 895 only */
                    309: #define SIST1_STO      0x04
                    310: #define SIST1_GEN      0x02
                    311: #define SIST1_HTH      0x01
                    312:
                    313: #define SIOP_SLPAR     0x44 /* scsi longitudinal parity, R/W */
                    314:
                    315: #define SIOP_SWIDE     0x45 /* scsi wide residue, RW, 875 only */
                    316:
                    317: #define SIOP_MACNTL    0x46 /* memory access control, R/W */
                    318:
                    319: #define SIOP_GPCNTL    0x47 /* General Purpose Pin control, R/W */
                    320: #define GPCNTL_ME      0x80    /* 875 only */
                    321: #define GPCNTL_FE      0x40    /* 875 only */
                    322: #define GPCNTL_IN4     0x10    /* 875 only */
                    323: #define GPCNTL_IN3     0x08    /* 875 only */
                    324: #define GPCNTL_IN2     0x04    /* 875 only */
                    325: #define GPCNTL_IN1     0x02
                    326: #define GPCNTL_IN0     0x01
                    327:
                    328: #define SIOP_STIME0    0x48 /* SCSI timer 0, R/W */
                    329: #define STIME0_HTH_SHIFT 4
                    330: #define STIME0_HTH_MASK        0xf0
                    331: #define STIME0_SEL_SHIFT 0
                    332: #define STIME0_SEL_MASK        0x0f
                    333:
                    334: #define SIOP_STIME1    0x49 /* SCSI timer 1, R/W */
                    335: #define STIME1_HTHBA   0x40    /* 875 only */
                    336: #define STIME1_GENSF   0x20    /* 875 only */
                    337: #define STIME1_HTHSF   0x10    /* 875 only */
                    338: #define STIME1_GEN_SHIFT 0
                    339: #define STIME1_GEN_MASK        0x0f
                    340:
                    341: #define SIOP_RESPID0   0x4A /* response ID, R/W */
                    342:
                    343: #define SIOP_RESPID1   0x4B /* response ID, R/W, 875-only */
                    344:
                    345: #define SIOP_STEST0    0x4C /* SCSI test 0, RO */
                    346:
                    347: #define SIOP_STEST1    0x4D /* SCSI test 1, RO, RW on 875 */
                    348: #define STEST1_DOGE    0x20    /* 1010 only */
                    349: #define STEST1_DIGE    0x10    /* 1010 only */
                    350: #define STEST1_DBLEN   0x08    /* 875-only */
                    351: #define STEST1_DBLSEL  0x04    /* 875-only */
                    352:
                    353: #define SIOP_STEST2    0x4E /* SCSI test 2, RO, R/W on 875 */
                    354: #define STEST2_DIF     0x20    /* 875 only */
                    355: #define STEST2_EXT     0x02
                    356:
                    357: #define SIOP_STEST3    0x4F /* SCSI test 3, RO, RW on 875 */
                    358: #define STEST3_TE      0x80
                    359: #define STEST3_HSC     0x20
                    360:
                    361: #define SIOP_STEST4    0x52 /* SCSI test 4, 895 only */
                    362: #define STEST4_MODE_MASK 0xc0
                    363: #define STEST4_MODE_DIF        0x40
                    364: #define STEST4_MODE_SE 0x80
                    365: #define STEST4_MODE_LVD        0xc0
                    366: #define STEST4_LOCK    0x20
                    367: #define STEST4_
                    368:
                    369: #define SIOP_SIDL      0x50 /* SCSI input data latch, RO */
                    370:
                    371: #define SIOP_SODL      0x54 /* SCSI output data latch, R/W */
                    372:
                    373: #define SIOP_SBDL      0x58 /* SCSI bus data lines, RO */
                    374:
                    375: #define SIOP_SCRATCHB  0x5C /* Scratch register B, R/W */
                    376:
                    377: #define SIOP_SCRATCHC  0x60 /* Scratch register C, R/W, 875 only */
                    378:
                    379: #define SIOP_SCRATCHD  0x64 /* Scratch register D, R/W, 875-only */
                    380:
                    381: #define SIOP_SCRATCHE  0x68 /* Scratch register E, R/W, 875-only */
                    382:
                    383: #define SIOP_SCRATCHF  0x6c /* Scratch register F, R/W, 875-only */
                    384:
                    385: #define SIOP_SCRATCHG  0x70 /* Scratch register G, R/W, 875-only */
                    386:
                    387: #define SIOP_SCRATCHH  0x74 /* Scratch register H, R/W, 875-only */
                    388:
                    389: #define SIOP_SCRATCHI  0x78 /* Scratch register I, R/W, 875-only */
                    390:
                    391: #define SIOP_SCRATCHJ  0x7c /* Scratch register J, R/W, 875-only */
                    392:
                    393: #define SIOP_SCNTL4    0xBC /* SCSI control 4, R/W, 1010-only */
                    394: #define SCNTL4_XCLKS_ST        0x01
                    395: #define SCNTL4_XCLKS_DT        0x02
                    396: #define SCNTL4_XCLKH_ST        0x04
                    397: #define SCNTL4_XCLKH_DT        0x08
                    398: #define SCNTL4_AIPEN   0x40
                    399: #define SCNTL4_U3EN    0x80
                    400:
                    401: #define SIOP_DFBC      0xf0 /* DMA fifo byte count, RO */
                    402:
                    403: #define SIOP_AIPCNTL0  0xbe    /* AIP Control 0, 1010-only */
                    404: #define AIPCNTL0_ERRLIVE 0x04  /* AIP error status, live */
                    405: #define AIPCNTL0_ERR   0x02    /* AIP error status, latched */
                    406: #define AIPCNTL0_PARITYERRs 0x01 /* Parity error */
                    407:
                    408: #define SIOP_AIPCNTL1  0xbf    /* AIP Control 1, 1010-only */
                    409: #define AIPCNTL1_DIS   0x08    /* disable AIP generation, 1010-66 only */
                    410: #define AIPCNTL1_RSETERR 0x04  /* reset AIP error 1010-66 only */
                    411: #define AIPCNTL1_FB    0x02    /* force bad AIP value 1010-66 only */
                    412: #define AIPCNTL1_RSET  0x01    /* reset AIP sequence value 1010-66 only */
                    413:
                    414: /*
                    415:  * Non-volatile configuration settings stored in the EEPROM.  There
                    416:  * are at least two known formats: Symbios Logic format and Tekram format.
                    417:  */
                    418:
                    419: #define        SIOP_NVRAM_SYM_SIZE             368
                    420: #define        SIOP_NVRAM_SYM_ADDRESS          0x100
                    421:
                    422: struct nvram_symbios {
                    423:        /* Header (6 bytes) */
                    424:        u_int16_t       type;           /* 0x0000 */
                    425:        u_int16_t       byte_count;     /* excluding header/trailer */
                    426:        u_int16_t       checksum;
                    427:
                    428:        /* Adapter configuration (20 bytes) */
                    429:        u_int8_t        v_major;
                    430:        u_int8_t        v_minor;
                    431:        u_int32_t       boot_crc;
                    432:        u_int16_t       flags;
                    433: #define        NVRAM_SYM_F_SCAM_ENABLE         0x0001
                    434: #define        NVRAM_SYM_F_PARITY_ENABLE       0x0002
                    435: #define        NVRAM_SYM_F_VERBOSE_MESSAGES    0x0004
                    436: #define        NVRAM_SYM_F_CHS_MAPPING         0x0008
                    437:        u_int16_t       flags1;
                    438: #define        NVRAM_SYM_F1_SCAN_HI_LO         0x0001
                    439:        u_int16_t       term_state;
                    440: #define        NVRAM_SYM_TERM_CANT_PROGRAM     0
                    441: #define        NVRAM_SYM_TERM_ENABLED          1
                    442: #define        NVRAM_SYM_TERM_DISABLED         2
                    443:        u_int16_t       rmvbl_flags;
                    444: #define        NVRAM_SYM_RMVBL_NO_SUPPORT      0
                    445: #define        NVRAM_SYM_RMVBL_BOOT_DEVICE     1
                    446: #define        NVRAM_SYM_RMVBL_MEDIA_INSTALLED 2
                    447:        u_int8_t        host_id;
                    448:        u_int8_t        num_hba;
                    449:        u_int8_t        num_devices;
                    450:        u_int8_t        max_scam_devices;
                    451:        u_int8_t        num_valid_scam_devices;
                    452:        u_int8_t        rsvd;
                    453:
                    454:        /* Boot order (14 bytes x 4) */
                    455:        struct nvram_symbios_host {
                    456:                u_int16_t       type;           /* 4 - 8xx */
                    457:                u_int16_t       device_id;      /* PCI device ID */
                    458:                u_int16_t       vendor_id;      /* PCI vendor ID */
                    459:                u_int8_t        bus_nr;         /* PCI bus number */
                    460:                u_int8_t        device_fn;      /* PCI device/func # << 3 */
                    461:                u_int16_t       word8;
                    462:                u_int16_t       flags;
                    463: #define        NVRAM_SYM_HOST_F_SCAN_AT_BOOT   0x0001
                    464:                u_int16_t       io_port;        /* PCI I/O address */
                    465:        } __packed host[4];
                    466:
                    467:        /* Targets (8 bytes x 16) */
                    468:        struct nvram_symbios_target {
                    469:                u_int8_t        flags;
                    470: #define        NVRAM_SYM_TARG_F_DISCONNECT_EN  0x0001
                    471: #define        NVRAM_SYM_TARG_F_SCAN_AT_BOOT   0x0002
                    472: #define        NVRAM_SYM_TARG_F_SCAN_LUNS      0x0004
                    473: #define        NVRAM_SYM_TARG_F_TQ_EN          0x0008
                    474:                u_int8_t        rsvd;
                    475:                u_int8_t        bus_width;
                    476:                u_int8_t        sync_offset;    /* 8, 16, etc. */
                    477:                u_int16_t       sync_period;    /* 4 * factor */
                    478:                u_int16_t       timeout;
                    479:        } __packed target[16];
                    480:
                    481:        /* SCAM table (8 bytes x 4) */
                    482:        struct nvram_symbios_scam {
                    483:                u_int16_t       id;
                    484:                u_int16_t       method;
                    485: #define        NVRAM_SYM_SCAM_DEFAULT_METHOD   0
                    486: #define        NVRAM_SYM_SCAM_DONT_ASSIGN      1
                    487: #define        NVRAM_SYM_SCAM_SET_SPECIFIC_ID  2
                    488: #define        NVRAM_SYM_SCAM_USE_ORDER_GIVEN  3
                    489:                u_int16_t       status;
                    490: #define        NVRAM_SYM_SCAM_UNKNOWN          0
                    491: #define        NVRAM_SYM_SCAM_DEVICE_NOT_FOUND 1
                    492: #define        NVRAM_SYM_SCAM_ID_NOT_SET       2
                    493: #define        NVRAM_SYM_SCAM_ID_VALID         3
                    494:                u_int8_t                target_id;
                    495:                u_int8_t                rsvd;
                    496:        } __packed scam[4];
                    497:
                    498:        u_int8_t        spare_devices[15 * 8];
                    499:        u_int8_t        trailer[6];     /* 0xfe 0xfe 0x00 0x00 0x00 0x00 */
                    500: } __packed;
                    501:
                    502: #define        SIOP_NVRAM_TEK_SIZE             64
                    503: #define        SIOP_NVRAM_TEK_93c46_ADDRESS    0
                    504: #define        SIOP_NVRAM_TEK_24c16_ADDRESS    0x40
                    505:
                    506: #if 0
                    507: static const u_int8_t tekram_sync_table[16] __attribute__((__unused__)) = {
                    508:        25, 31, 37,  43,
                    509:        50, 62, 75, 125,
                    510:        12, 15, 18,  21,
                    511:         6,  7,  9,  10,
                    512: };
                    513:
                    514: struct nvram_tekram {
                    515:        struct nvram_tekram_target {
                    516:                u_int8_t        flags;
                    517: #define        NVRAM_TEK_TARG_F_PARITY_CHECK   0x01
                    518: #define        NVRAM_TEK_TARG_F_SYNC_NEGO      0x02
                    519: #define        NVRAM_TEK_TARG_F_DISCONNECT_EN  0x04
                    520: #define        NVRAM_TEK_TARG_F_START_CMD      0x08
                    521: #define        NVRAM_TEK_TARG_F_TQ_EN          0x10
                    522: #define        NVRAM_TEK_TARG_F_WIDE_NEGO      0x20
                    523:                u_int8_t        sync_index;
                    524:                u_int16_t       word2;
                    525:        } __packed target[16];
                    526:        u_int8_t        host_id;
                    527:        u_int8_t        flags;
                    528: #define        NVRAM_TEK_F_MORE_THAN_2_DRIVES  0x01
                    529: #define        NVRAM_TEK_F_DRIVES_SUP_1G       0x02
                    530: #define        NVRAM_TEK_F_RESET_ON_POWER_ON   0x04
                    531: #define        NVRAM_TEK_F_ACTIVE_NEGATION     0x08
                    532: #define        NVRAM_TEK_F_IMMEDIATE_SEEK      0x10
                    533: #define        NVRAM_TEK_F_SCAN_LUNS           0x20
                    534: #define        NVRAM_TEK_F_REMOVABLE_FLAGS     0xc0    /* 0 dis, 1 boot, 2 all */
                    535:        u_int8_t        boot_delay_index;
                    536:        u_int8_t        max_tags_index;
                    537:        u_int16_t       flags1;
                    538: #define        NVRAM_TEK_F_F2_F6_ENABLED       0x0001
                    539:        u_int16_t       spare[29];
                    540: } __packed;
                    541: #endif

CVSweb