1*86d7f5d3SJohn Marino /*- 2*86d7f5d3SJohn Marino * File Name : trm.h 3*86d7f5d3SJohn Marino * 4*86d7f5d3SJohn Marino * Tekram DC395U/UW/F ,DC315/U 5*86d7f5d3SJohn Marino * PCI SCSI Bus Master Host Adapter Device Driver 6*86d7f5d3SJohn Marino * (SCSI chip set used Tekram ASIC TRM-S1040) 7*86d7f5d3SJohn Marino * 8*86d7f5d3SJohn Marino * (C)Copyright 1995-2001 Tekram Technology Co.,Ltd. 9*86d7f5d3SJohn Marino * 10*86d7f5d3SJohn Marino * Redistribution and use in source and binary forms, with or without 11*86d7f5d3SJohn Marino * modification, are permitted provided that the following conditions 12*86d7f5d3SJohn Marino * are met: 13*86d7f5d3SJohn Marino * 1. Redistributions of source code must retain the above copyright 14*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer. 15*86d7f5d3SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 16*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer in the 17*86d7f5d3SJohn Marino * documentation and/or other materials provided with the distribution. 18*86d7f5d3SJohn Marino * 3. The name of the author may not be used to endorse or promote products 19*86d7f5d3SJohn Marino * derived from this software without specific prior written permission. 20*86d7f5d3SJohn Marino * 21*86d7f5d3SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22*86d7f5d3SJohn Marino * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23*86d7f5d3SJohn Marino * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24*86d7f5d3SJohn Marino * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 25*86d7f5d3SJohn Marino * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26*86d7f5d3SJohn Marino * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27*86d7f5d3SJohn Marino * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28*86d7f5d3SJohn Marino * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29*86d7f5d3SJohn Marino * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30*86d7f5d3SJohn Marino * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31*86d7f5d3SJohn Marino * 32*86d7f5d3SJohn Marino * $FreeBSD: src/sys/dev/trm/trm.h,v 1.1.2.2 2002/12/19 20:34:46 cognet Exp $ 33*86d7f5d3SJohn Marino * $DragonFly: src/sys/dev/disk/trm/trm.h,v 1.3 2008/01/05 22:24:08 pavalos Exp $ 34*86d7f5d3SJohn Marino */ 35*86d7f5d3SJohn Marino 36*86d7f5d3SJohn Marino #ifndef trm_H 37*86d7f5d3SJohn Marino #define trm_H 38*86d7f5d3SJohn Marino 39*86d7f5d3SJohn Marino /* SCSI CAM */ 40*86d7f5d3SJohn Marino 41*86d7f5d3SJohn Marino #define TRM_TRANS_CUR 0x01 /* Modify current neogtiation status */ 42*86d7f5d3SJohn Marino #define TRM_TRANS_ACTIVE 0x03 /* Assume this is the active target */ 43*86d7f5d3SJohn Marino #define TRM_TRANS_GOAL 0x04 /* Modify negotiation goal */ 44*86d7f5d3SJohn Marino #define TRM_TRANS_USER 0x08 /* Modify user negotiation settings */ 45*86d7f5d3SJohn Marino 46*86d7f5d3SJohn Marino struct trm_transinfo { 47*86d7f5d3SJohn Marino u_int8_t width; 48*86d7f5d3SJohn Marino u_int8_t period; 49*86d7f5d3SJohn Marino u_int8_t offset; 50*86d7f5d3SJohn Marino }; 51*86d7f5d3SJohn Marino 52*86d7f5d3SJohn Marino struct trm_target_info { 53*86d7f5d3SJohn Marino u_int8_t disc_tag; /* bits define..... */ 54*86d7f5d3SJohn Marino #define TRM_CUR_DISCENB 0x01 /* current setting disconnect enable */ 55*86d7f5d3SJohn Marino #define TRM_CUR_TAGENB 0x02 /* current setting tag command Q enable */ 56*86d7f5d3SJohn Marino #define TRM_USR_DISCENB 0x04 /* user adapter device setting disconnect enable */ 57*86d7f5d3SJohn Marino #define TRM_USR_TAGENB 0x08 /* user adapter device setting tag command Q enable*/ 58*86d7f5d3SJohn Marino struct trm_transinfo current; /* info of current */ 59*86d7f5d3SJohn Marino struct trm_transinfo goal; /* info of after negotiating */ 60*86d7f5d3SJohn Marino struct trm_transinfo user; /* info of user adapter device setting */ 61*86d7f5d3SJohn Marino }; 62*86d7f5d3SJohn Marino /* 63*86d7f5d3SJohn Marino * SCSI CAM ** 64*86d7f5d3SJohn Marino */ 65*86d7f5d3SJohn Marino 66*86d7f5d3SJohn Marino /* 67*86d7f5d3SJohn Marino * bus_dma_segment_t 68*86d7f5d3SJohn Marino * 69*86d7f5d3SJohn Marino * Describes a single contiguous DMA transaction. Values 70*86d7f5d3SJohn Marino * are suitable for programming into DMA registers. 71*86d7f5d3SJohn Marino * 72*86d7f5d3SJohn Marino *typedef struct bus_dma_segment 73*86d7f5d3SJohn Marino *{ 74*86d7f5d3SJohn Marino * bus_addr_t ds_addr; // DMA address 75*86d7f5d3SJohn Marino * bus_size_t ds_len; // length of transfer 76*86d7f5d3SJohn Marino *} bus_dma_segment_t; 77*86d7f5d3SJohn Marino */ 78*86d7f5d3SJohn Marino 79*86d7f5d3SJohn Marino /*;----------------------Segment Entry------------------------------------*/ 80*86d7f5d3SJohn Marino typedef struct _SGentry { 81*86d7f5d3SJohn Marino u_int32_t address; 82*86d7f5d3SJohn Marino u_int32_t length; 83*86d7f5d3SJohn Marino } SGentry, *PSEG; 84*86d7f5d3SJohn Marino /* 85*86d7f5d3SJohn Marino *----------------------------------------------------------------------- 86*86d7f5d3SJohn Marino * feature of chip set MAX value 87*86d7f5d3SJohn Marino *----------------------------------------------------------------------- 88*86d7f5d3SJohn Marino */ 89*86d7f5d3SJohn Marino 90*86d7f5d3SJohn Marino #define TRM_MAX_ADAPTER_NUM 4 91*86d7f5d3SJohn Marino #define TRM_MAX_DEVICES 16 92*86d7f5d3SJohn Marino #define TRM_MAX_SG_LISTENTRY 32 93*86d7f5d3SJohn Marino #define TRM_MAX_TARGETS 16 94*86d7f5d3SJohn Marino #define TRM_MAX_TAGS_CMD_QUEUE 256 /* MAX_CMD_QUEUE 20*/ 95*86d7f5d3SJohn Marino #define TRM_MAX_CMD_PER_LUN 32 96*86d7f5d3SJohn Marino #define TRM_MAX_SRB_CNT 256 97*86d7f5d3SJohn Marino #define TRM_MAX_START_JOB 256 98*86d7f5d3SJohn Marino #define TRM_NSEG (btoc(MAXPHYS) + 1) 99*86d7f5d3SJohn Marino #define TRM_MAXTRANSFER_SIZE 0xFFFFFF /* restricted by 24 bit counter */ 100*86d7f5d3SJohn Marino #define PAGELEN 4096 101*86d7f5d3SJohn Marino 102*86d7f5d3SJohn Marino #define SEL_TIMEOUT 153 /* 250 ms selection timeout (@ 40MHz) */ 103*86d7f5d3SJohn Marino 104*86d7f5d3SJohn Marino /* 105*86d7f5d3SJohn Marino * CAM ccb 106*86d7f5d3SJohn Marino * Union of all CCB types for kernel space allocation. This union should 107*86d7f5d3SJohn Marino * never be used for manipulating CCBs - its only use is for the allocation 108*86d7f5d3SJohn Marino * and deallocation of raw CCB space and is the return type of xpt_ccb_alloc 109*86d7f5d3SJohn Marino * and the argument to xpt_ccb_free. 110*86d7f5d3SJohn Marino * 111*86d7f5d3SJohn Marino *union ccb { 112*86d7f5d3SJohn Marino * struct ccb_hdr ccb_h; // For convenience 113*86d7f5d3SJohn Marino * struct ccb_scsiio csio; 114*86d7f5d3SJohn Marino * struct ccb_getdev cgd; 115*86d7f5d3SJohn Marino * struct ccb_getdevlist cgdl; 116*86d7f5d3SJohn Marino * struct ccb_pathinq cpi; 117*86d7f5d3SJohn Marino * struct ccb_relsim crs; 118*86d7f5d3SJohn Marino * struct ccb_setasync csa; 119*86d7f5d3SJohn Marino * struct ccb_setdev csd; 120*86d7f5d3SJohn Marino * struct ccb_dev_match cdm; 121*86d7f5d3SJohn Marino * struct ccb_trans_settings cts; 122*86d7f5d3SJohn Marino * struct ccb_calc_geometry ccg; 123*86d7f5d3SJohn Marino * struct ccb_abort cab; 124*86d7f5d3SJohn Marino * struct ccb_resetbus crb; 125*86d7f5d3SJohn Marino * struct ccb_resetdev crd; 126*86d7f5d3SJohn Marino * struct ccb_termio tio; 127*86d7f5d3SJohn Marino * struct ccb_accept_tio atio; 128*86d7f5d3SJohn Marino * struct ccb_scsiio ctio; 129*86d7f5d3SJohn Marino * struct ccb_en_lun cel; 130*86d7f5d3SJohn Marino * struct ccb_immed_notify cin; 131*86d7f5d3SJohn Marino * struct ccb_notify_ack cna; 132*86d7f5d3SJohn Marino * struct ccb_eng_inq cei; 133*86d7f5d3SJohn Marino * struct ccb_eng_exec cee; 134*86d7f5d3SJohn Marino * struct ccb_rescan crcn; 135*86d7f5d3SJohn Marino * struct ccb_debug cdbg; 136*86d7f5d3SJohn Marino * }; 137*86d7f5d3SJohn Marino */ 138*86d7f5d3SJohn Marino 139*86d7f5d3SJohn Marino /* 140*86d7f5d3SJohn Marino *----------------------------------------------------------------------- 141*86d7f5d3SJohn Marino * SCSI Request Block 142*86d7f5d3SJohn Marino *----------------------------------------------------------------------- 143*86d7f5d3SJohn Marino */ 144*86d7f5d3SJohn Marino struct _SRB { 145*86d7f5d3SJohn Marino u_int8_t CmdBlock[12]; 146*86d7f5d3SJohn Marino u_long Segment0[2]; 147*86d7f5d3SJohn Marino u_long Segment1[2]; 148*86d7f5d3SJohn Marino struct _SRB *pNextSRB; 149*86d7f5d3SJohn Marino struct _DCB *pSRBDCB; 150*86d7f5d3SJohn Marino SGentry SgSenseTemp; 151*86d7f5d3SJohn Marino 152*86d7f5d3SJohn Marino PSEG pSRBSGL; /* scatter gather list */ 153*86d7f5d3SJohn Marino 154*86d7f5d3SJohn Marino u_int32_t SRBSGPhyAddr; /* a segment starting address */ 155*86d7f5d3SJohn Marino u_int32_t SRBTotalXferLength; 156*86d7f5d3SJohn Marino 157*86d7f5d3SJohn Marino /* 158*86d7f5d3SJohn Marino * CAM ccb 159*86d7f5d3SJohn Marino */ 160*86d7f5d3SJohn Marino union ccb *pccb; 161*86d7f5d3SJohn Marino bus_dmamap_t sg_dmamap; 162*86d7f5d3SJohn Marino bus_dmamap_t dmamap; 163*86d7f5d3SJohn Marino u_int16_t SRBState; 164*86d7f5d3SJohn Marino u_int8_t * pMsgPtr; 165*86d7f5d3SJohn Marino 166*86d7f5d3SJohn Marino u_int8_t SRBSGCount; 167*86d7f5d3SJohn Marino u_int8_t SRBSGIndex; 168*86d7f5d3SJohn Marino u_int8_t MsgInBuf[6]; 169*86d7f5d3SJohn Marino u_int8_t MsgOutBuf[6]; 170*86d7f5d3SJohn Marino 171*86d7f5d3SJohn Marino u_int8_t AdaptStatus; 172*86d7f5d3SJohn Marino u_int8_t TargetStatus; 173*86d7f5d3SJohn Marino u_int8_t MsgCnt; 174*86d7f5d3SJohn Marino u_int8_t TagNumber; 175*86d7f5d3SJohn Marino 176*86d7f5d3SJohn Marino u_int8_t SRBStatus; 177*86d7f5d3SJohn Marino u_int8_t RetryCnt; 178*86d7f5d3SJohn Marino u_int8_t SRBFlag; 179*86d7f5d3SJohn Marino u_int8_t ScsiCmdLen; 180*86d7f5d3SJohn Marino u_int8_t ScsiPhase; 181*86d7f5d3SJohn Marino u_int8_t Reserved[3]; /*;for dword alignment */ 182*86d7f5d3SJohn Marino }; 183*86d7f5d3SJohn Marino typedef struct _SRB TRM_SRB, *PSRB; 184*86d7f5d3SJohn Marino 185*86d7f5d3SJohn Marino /* 186*86d7f5d3SJohn Marino *----------------------------------------------------------------------- 187*86d7f5d3SJohn Marino * Device Control Block 188*86d7f5d3SJohn Marino *----------------------------------------------------------------------- 189*86d7f5d3SJohn Marino */ 190*86d7f5d3SJohn Marino struct _DCB 191*86d7f5d3SJohn Marino { 192*86d7f5d3SJohn Marino PSRB pWaitingSRB; 193*86d7f5d3SJohn Marino PSRB pWaitingLastSRB; 194*86d7f5d3SJohn Marino 195*86d7f5d3SJohn Marino PSRB pGoingSRB; 196*86d7f5d3SJohn Marino PSRB pGoingLastSRB; 197*86d7f5d3SJohn Marino 198*86d7f5d3SJohn Marino PSRB pActiveSRB; 199*86d7f5d3SJohn Marino 200*86d7f5d3SJohn Marino u_int16_t GoingSRBCnt; 201*86d7f5d3SJohn Marino u_int16_t MaxActiveCommandCnt; 202*86d7f5d3SJohn Marino 203*86d7f5d3SJohn Marino u_int8_t TargetID; /*; SCSI Target ID (SCSI Only) */ 204*86d7f5d3SJohn Marino u_int8_t TargetLUN; /*; SCSI Log. Unit (SCSI Only) */ 205*86d7f5d3SJohn Marino u_int8_t DCBFlag; 206*86d7f5d3SJohn Marino u_int8_t DevType; 207*86d7f5d3SJohn Marino 208*86d7f5d3SJohn Marino u_int8_t SyncMode; /* mode ? (1 sync):(0 async) */ 209*86d7f5d3SJohn Marino u_int8_t MaxNegoPeriod; /* for nego. */ 210*86d7f5d3SJohn Marino u_int8_t SyncPeriod; /* for reg. */ 211*86d7f5d3SJohn Marino u_int8_t SyncOffset; /* for reg. and nego.(low nibble) */ 212*86d7f5d3SJohn Marino 213*86d7f5d3SJohn Marino u_int8_t DevMode; 214*86d7f5d3SJohn Marino u_int8_t AdpMode; 215*86d7f5d3SJohn Marino 216*86d7f5d3SJohn Marino u_int8_t IdentifyMsg; 217*86d7f5d3SJohn Marino u_int8_t DCBstatus; /* DCB status */ 218*86d7f5d3SJohn Marino /*u_int8_t Reserved[3]; for dword alignment */ 219*86d7f5d3SJohn Marino struct trm_target_info tinfo; /* 10 bytes */ 220*86d7f5d3SJohn Marino struct _DCB *pNextDCB; 221*86d7f5d3SJohn Marino }; 222*86d7f5d3SJohn Marino typedef struct _DCB TRM_DCB, *PDCB; 223*86d7f5d3SJohn Marino 224*86d7f5d3SJohn Marino /* 225*86d7f5d3SJohn Marino *----------------------------------------------------------------------- 226*86d7f5d3SJohn Marino * Adapter Control Block 227*86d7f5d3SJohn Marino *----------------------------------------------------------------------- 228*86d7f5d3SJohn Marino */ 229*86d7f5d3SJohn Marino struct _ACB 230*86d7f5d3SJohn Marino { 231*86d7f5d3SJohn Marino device_t dev; 232*86d7f5d3SJohn Marino 233*86d7f5d3SJohn Marino bus_space_tag_t tag; 234*86d7f5d3SJohn Marino bus_space_handle_t bsh; 235*86d7f5d3SJohn Marino bus_dma_tag_t parent_dmat; 236*86d7f5d3SJohn Marino bus_dma_tag_t buffer_dmat; /* dmat for buffer I/O */ 237*86d7f5d3SJohn Marino bus_dma_tag_t srb_dmat; 238*86d7f5d3SJohn Marino bus_dma_tag_t sense_dmat; /* dmat for sense buffer */ 239*86d7f5d3SJohn Marino bus_dma_tag_t sg_dmat; 240*86d7f5d3SJohn Marino bus_dmamap_t sense_dmamap; 241*86d7f5d3SJohn Marino bus_dmamap_t srb_dmamap; 242*86d7f5d3SJohn Marino bus_addr_t sense_busaddr; 243*86d7f5d3SJohn Marino struct scsi_sense_data *sense_buffers; 244*86d7f5d3SJohn Marino struct resource *iores, *irq; 245*86d7f5d3SJohn Marino void *ih; 246*86d7f5d3SJohn Marino /* 247*86d7f5d3SJohn Marino * CAM SIM/XPT 248*86d7f5d3SJohn Marino */ 249*86d7f5d3SJohn Marino struct cam_sim *psim; 250*86d7f5d3SJohn Marino struct cam_path *ppath; 251*86d7f5d3SJohn Marino 252*86d7f5d3SJohn Marino TRM_SRB TmpSRB; 253*86d7f5d3SJohn Marino TRM_DCB DCBarray[16][8]; 254*86d7f5d3SJohn Marino 255*86d7f5d3SJohn Marino u_int32_t srb_physbase; 256*86d7f5d3SJohn Marino 257*86d7f5d3SJohn Marino PSRB pFreeSRB; 258*86d7f5d3SJohn Marino PDCB pActiveDCB; 259*86d7f5d3SJohn Marino 260*86d7f5d3SJohn Marino PDCB pLinkDCB; 261*86d7f5d3SJohn Marino PDCB pDCBRunRobin; 262*86d7f5d3SJohn Marino 263*86d7f5d3SJohn Marino u_int16_t max_id; 264*86d7f5d3SJohn Marino u_int16_t max_lun; 265*86d7f5d3SJohn Marino 266*86d7f5d3SJohn Marino u_int8_t msgin123[4]; 267*86d7f5d3SJohn Marino 268*86d7f5d3SJohn Marino u_int8_t scan_devices[16][8]; 269*86d7f5d3SJohn Marino 270*86d7f5d3SJohn Marino u_int8_t AdaptSCSIID; /*; Adapter SCSI Target ID */ 271*86d7f5d3SJohn Marino u_int8_t AdaptSCSILUN; /*; Adapter SCSI LUN */ 272*86d7f5d3SJohn Marino u_int8_t DeviceCnt; 273*86d7f5d3SJohn Marino u_int8_t ACBFlag; 274*86d7f5d3SJohn Marino 275*86d7f5d3SJohn Marino u_int8_t TagMaxNum; 276*86d7f5d3SJohn Marino u_int8_t Config; 277*86d7f5d3SJohn Marino u_int8_t AdaptType; 278*86d7f5d3SJohn Marino u_int8_t AdapterUnit; /* nth Adapter this driver */ 279*86d7f5d3SJohn Marino }; 280*86d7f5d3SJohn Marino typedef struct _ACB TRM_ACB, *PACB; 281*86d7f5d3SJohn Marino /* 282*86d7f5d3SJohn Marino * ----SRB State machine definition 283*86d7f5d3SJohn Marino */ 284*86d7f5d3SJohn Marino #define SRB_FREE 0x0000 285*86d7f5d3SJohn Marino #define SRB_WAIT 0x0001 286*86d7f5d3SJohn Marino #define SRB_READY 0x0002 287*86d7f5d3SJohn Marino #define SRB_MSGOUT 0x0004 /*arbitration+msg_out 1st byte*/ 288*86d7f5d3SJohn Marino #define SRB_MSGIN 0x0008 289*86d7f5d3SJohn Marino #define SRB_EXTEND_MSGIN 0x0010 290*86d7f5d3SJohn Marino #define SRB_COMMAND 0x0020 291*86d7f5d3SJohn Marino #define SRB_START_ 0x0040 /*arbitration+msg_out+command_out*/ 292*86d7f5d3SJohn Marino #define SRB_DISCONNECT 0x0080 293*86d7f5d3SJohn Marino #define SRB_DATA_XFER 0x0100 294*86d7f5d3SJohn Marino #define SRB_XFERPAD 0x0200 295*86d7f5d3SJohn Marino #define SRB_STATUS 0x0400 296*86d7f5d3SJohn Marino #define SRB_COMPLETED 0x0800 297*86d7f5d3SJohn Marino #define SRB_ABORT_SENT 0x1000 298*86d7f5d3SJohn Marino #define SRB_DO_SYNC_NEGO 0x2000 299*86d7f5d3SJohn Marino #define SRB_DO_WIDE_NEGO 0x4000 300*86d7f5d3SJohn Marino #define SRB_UNEXPECT_RESEL 0x8000 301*86d7f5d3SJohn Marino /* 302*86d7f5d3SJohn Marino * 303*86d7f5d3SJohn Marino * ACB Config 304*86d7f5d3SJohn Marino * 305*86d7f5d3SJohn Marino */ 306*86d7f5d3SJohn Marino #define HCC_WIDE_CARD 0x20 307*86d7f5d3SJohn Marino #define HCC_SCSI_RESET 0x10 308*86d7f5d3SJohn Marino #define HCC_PARITY 0x08 309*86d7f5d3SJohn Marino #define HCC_AUTOTERM 0x04 310*86d7f5d3SJohn Marino #define HCC_LOW8TERM 0x02 311*86d7f5d3SJohn Marino #define HCC_UP8TERM 0x01 312*86d7f5d3SJohn Marino /* 313*86d7f5d3SJohn Marino * ---ACB Flag 314*86d7f5d3SJohn Marino */ 315*86d7f5d3SJohn Marino #define RESET_DEV 0x00000001 316*86d7f5d3SJohn Marino #define RESET_DETECT 0x00000002 317*86d7f5d3SJohn Marino #define RESET_DONE 0x00000004 318*86d7f5d3SJohn Marino 319*86d7f5d3SJohn Marino /* 320*86d7f5d3SJohn Marino * ---DCB Flag 321*86d7f5d3SJohn Marino */ 322*86d7f5d3SJohn Marino #define ABORT_DEV_ 0x00000001 323*86d7f5d3SJohn Marino 324*86d7f5d3SJohn Marino /* 325*86d7f5d3SJohn Marino * ---DCB status 326*86d7f5d3SJohn Marino */ 327*86d7f5d3SJohn Marino #define DS_IN_QUEUE 0x00000001 328*86d7f5d3SJohn Marino 329*86d7f5d3SJohn Marino /* 330*86d7f5d3SJohn Marino * ---SRB status 331*86d7f5d3SJohn Marino */ 332*86d7f5d3SJohn Marino #define SRB_OK 0x00000001 333*86d7f5d3SJohn Marino #define ABORTION 0x00000002 334*86d7f5d3SJohn Marino #define OVER_RUN 0x00000004 335*86d7f5d3SJohn Marino #define UNDER_RUN 0x00000008 336*86d7f5d3SJohn Marino #define PARITY_ERROR 0x00000010 337*86d7f5d3SJohn Marino #define SRB_ERROR 0x00000020 338*86d7f5d3SJohn Marino 339*86d7f5d3SJohn Marino /* 340*86d7f5d3SJohn Marino * ---SRB Flag 341*86d7f5d3SJohn Marino */ 342*86d7f5d3SJohn Marino #define DATAOUT 0x00000080 343*86d7f5d3SJohn Marino #define DATAIN 0x00000040 344*86d7f5d3SJohn Marino #define RESIDUAL_VALID 0x00000020 345*86d7f5d3SJohn Marino #define ENABLE_TIMER 0x00000010 346*86d7f5d3SJohn Marino #define RESET_DEV0 0x00000004 347*86d7f5d3SJohn Marino #define ABORT_DEV 0x00000002 348*86d7f5d3SJohn Marino #define AUTO_REQSENSE 0x00000001 349*86d7f5d3SJohn Marino 350*86d7f5d3SJohn Marino /* 351*86d7f5d3SJohn Marino * ---Adapter status 352*86d7f5d3SJohn Marino */ 353*86d7f5d3SJohn Marino #define H_STATUS_GOOD 0x00 354*86d7f5d3SJohn Marino #define H_SEL_TIMEOUT 0x11 355*86d7f5d3SJohn Marino #define H_OVER_UNDER_RUN 0x12 356*86d7f5d3SJohn Marino #define H_UNEXP_BUS_FREE 0x13 357*86d7f5d3SJohn Marino #define H_TARGET_PHASE_F 0x14 358*86d7f5d3SJohn Marino #define H_INVALID_CCB_OP 0x16 359*86d7f5d3SJohn Marino #define H_LINK_CCB_BAD 0x17 360*86d7f5d3SJohn Marino #define H_BAD_TARGET_DIR 0x18 361*86d7f5d3SJohn Marino #define H_DUPLICATE_CCB 0x19 362*86d7f5d3SJohn Marino #define H_BAD_CCB_OR_SG 0x1A 363*86d7f5d3SJohn Marino #define H_ABORT 0x0FF 364*86d7f5d3SJohn Marino 365*86d7f5d3SJohn Marino /* 366*86d7f5d3SJohn Marino * ---SCSI Status byte codes 367*86d7f5d3SJohn Marino */ 368*86d7f5d3SJohn Marino #define SCSI_STAT_GOOD 0x00 /*; Good status */ 369*86d7f5d3SJohn Marino #define SCSI_STAT_CHECKCOND 0x02 /*; SCSI Check Condition */ 370*86d7f5d3SJohn Marino #define SCSI_STAT_CONDMET 0x04 /*; Condition Met */ 371*86d7f5d3SJohn Marino #define SCSI_STAT_BUSY 0x08 /*; Target busy status */ 372*86d7f5d3SJohn Marino #define SCSI_STAT_INTER 0x10 /*; Intermediate status */ 373*86d7f5d3SJohn Marino #define SCSI_STAT_INTERCONDMET 0x14 /*; Intermediate condition met */ 374*86d7f5d3SJohn Marino #define SCSI_STAT_RESCONFLICT 0x18 /*; Reservation conflict */ 375*86d7f5d3SJohn Marino #define SCSI_STAT_CMDTERM 0x22 /*; Command Terminated */ 376*86d7f5d3SJohn Marino #define SCSI_STAT_QUEUEFULL 0x28 /*; Queue Full */ 377*86d7f5d3SJohn Marino #define SCSI_STAT_UNEXP_BUS_F 0xFD /*; Unexpect Bus Free */ 378*86d7f5d3SJohn Marino #define SCSI_STAT_BUS_RST_DETECT 0xFE /*; Scsi Bus Reset detected */ 379*86d7f5d3SJohn Marino #define SCSI_STAT_SEL_TIMEOUT 0xFF /*; Selection Time out */ 380*86d7f5d3SJohn Marino 381*86d7f5d3SJohn Marino /* 382*86d7f5d3SJohn Marino * ---Sync_Mode 383*86d7f5d3SJohn Marino */ 384*86d7f5d3SJohn Marino #define SYNC_WIDE_TAG_ATNT_DISABLE 0x00000000 385*86d7f5d3SJohn Marino #define SYNC_NEGO_ENABLE 0x00000001 386*86d7f5d3SJohn Marino #define SYNC_NEGO_DONE 0x00000002 387*86d7f5d3SJohn Marino #define WIDE_NEGO_ENABLE 0x00000004 388*86d7f5d3SJohn Marino #define WIDE_NEGO_DONE 0x00000008 389*86d7f5d3SJohn Marino #define EN_TAG_QUEUING 0x00000010 390*86d7f5d3SJohn Marino #define EN_ATN_STOP 0x00000020 391*86d7f5d3SJohn Marino 392*86d7f5d3SJohn Marino #define SYNC_NEGO_OFFSET 15 393*86d7f5d3SJohn Marino /* 394*86d7f5d3SJohn Marino * ---SCSI bus phase 395*86d7f5d3SJohn Marino */ 396*86d7f5d3SJohn Marino #define SCSI_DATA_OUT_ 0 397*86d7f5d3SJohn Marino #define SCSI_DATA_IN_ 1 398*86d7f5d3SJohn Marino #define SCSI_COMMAND 2 399*86d7f5d3SJohn Marino #define SCSI_STATUS_ 3 400*86d7f5d3SJohn Marino #define SCSI_NOP0 4 401*86d7f5d3SJohn Marino #define SCSI_NOP1 5 402*86d7f5d3SJohn Marino #define SCSI_MSG_OUT 6 403*86d7f5d3SJohn Marino #define SCSI_MSG_IN 7 404*86d7f5d3SJohn Marino 405*86d7f5d3SJohn Marino /* 406*86d7f5d3SJohn Marino * ----SCSI MSG u_int8_t 407*86d7f5d3SJohn Marino */ 408*86d7f5d3SJohn Marino #define MSG_COMPLETE 0x00 409*86d7f5d3SJohn Marino #define MSG_EXTENDED 0x01 410*86d7f5d3SJohn Marino #define MSG_SAVE_PTR 0x02 411*86d7f5d3SJohn Marino #define MSG_RESTORE_PTR 0x03 412*86d7f5d3SJohn Marino #define MSG_DISCONNECT 0x04 413*86d7f5d3SJohn Marino #define MSG_INITIATOR_ERROR 0x05 414*86d7f5d3SJohn Marino #define MSG_ABORT 0x06 415*86d7f5d3SJohn Marino #define MSG_REJECT_ 0x07 416*86d7f5d3SJohn Marino #define MSG_NOP 0x08 417*86d7f5d3SJohn Marino #define MSG_PARITY_ERROR 0x09 418*86d7f5d3SJohn Marino #define MSG_LINK_CMD_COMPL 0x0A 419*86d7f5d3SJohn Marino #define MSG_LINK_CMD_COMPL_FLG 0x0B 420*86d7f5d3SJohn Marino #define MSG_BUS_RESET 0x0C 421*86d7f5d3SJohn Marino /* #define MSG_ABORT_TAG 0x0D */ 422*86d7f5d3SJohn Marino #define MSG_SIMPLE_QTAG 0x20 423*86d7f5d3SJohn Marino #define MSG_HEAD_QTAG 0x21 424*86d7f5d3SJohn Marino #define MSG_ORDER_QTAG 0x22 425*86d7f5d3SJohn Marino #define MSG_IGNOREWIDE 0x23 426*86d7f5d3SJohn Marino /* #define MSG_IDENTIFY 0x80 */ 427*86d7f5d3SJohn Marino #define MSG_HOST_ID 0xC0 428*86d7f5d3SJohn Marino /* bus wide length */ 429*86d7f5d3SJohn Marino #define MSG_EXT_WDTR_BUS_8_BIT 0x00 430*86d7f5d3SJohn Marino #define MSG_EXT_WDTR_BUS_16_BIT 0x01 431*86d7f5d3SJohn Marino #define MSG_EXT_WDTR_BUS_32_BIT 0x02 432*86d7f5d3SJohn Marino /* 433*86d7f5d3SJohn Marino * ----SCSI STATUS u_int8_t 434*86d7f5d3SJohn Marino */ 435*86d7f5d3SJohn Marino #define STATUS_GOOD 0x00 436*86d7f5d3SJohn Marino #define CHECK_CONDITION_ 0x02 437*86d7f5d3SJohn Marino #define STATUS_BUSY 0x08 438*86d7f5d3SJohn Marino #define STATUS_INTERMEDIATE 0x10 439*86d7f5d3SJohn Marino #define RESERVE_CONFLICT 0x18 440*86d7f5d3SJohn Marino 441*86d7f5d3SJohn Marino /* 442*86d7f5d3SJohn Marino * ---- cmd->result 443*86d7f5d3SJohn Marino */ 444*86d7f5d3SJohn Marino #define STATUS_MASK_ 0xFF 445*86d7f5d3SJohn Marino #define MSG_MASK 0xFF00 446*86d7f5d3SJohn Marino #define RETURN_MASK 0xFF0000 447*86d7f5d3SJohn Marino 448*86d7f5d3SJohn Marino /* 449*86d7f5d3SJohn Marino * Inquiry Data format 450*86d7f5d3SJohn Marino */ 451*86d7f5d3SJohn Marino 452*86d7f5d3SJohn Marino typedef struct _SCSIInqData { /* INQ */ 453*86d7f5d3SJohn Marino 454*86d7f5d3SJohn Marino u_int8_t DevType; /* Periph Qualifier & Periph Dev Type */ 455*86d7f5d3SJohn Marino u_int8_t RMB_TypeMod; /* rem media bit & Dev Type Modifier */ 456*86d7f5d3SJohn Marino u_int8_t Vers; /* ISO, ECMA, & ANSI versions */ 457*86d7f5d3SJohn Marino u_int8_t RDF; /* AEN, TRMIOP, & response data format*/ 458*86d7f5d3SJohn Marino u_int8_t AddLen; /* length of additional data */ 459*86d7f5d3SJohn Marino u_int8_t Res1; /* reserved */ 460*86d7f5d3SJohn Marino u_int8_t Res2; /* reserved */ 461*86d7f5d3SJohn Marino u_int8_t Flags; /* RelADr,Wbus32,Wbus16,Sync,etc. */ 462*86d7f5d3SJohn Marino u_int8_t VendorID[8]; /* Vendor Identification */ 463*86d7f5d3SJohn Marino u_int8_t ProductID[16]; /* Product Identification */ 464*86d7f5d3SJohn Marino u_int8_t ProductRev[4]; /* Product Revision */ 465*86d7f5d3SJohn Marino } SCSI_INQDATA, *PSCSI_INQDATA; 466*86d7f5d3SJohn Marino 467*86d7f5d3SJohn Marino 468*86d7f5d3SJohn Marino /* 469*86d7f5d3SJohn Marino * Inquiry byte 0 masks 470*86d7f5d3SJohn Marino */ 471*86d7f5d3SJohn Marino #define SCSI_DEVTYPE 0x1F /* Peripheral Device Type */ 472*86d7f5d3SJohn Marino #define SCSI_PERIPHQUAL 0xE0 /* Peripheral Qualifier */ 473*86d7f5d3SJohn Marino /* 474*86d7f5d3SJohn Marino * Inquiry byte 1 mask 475*86d7f5d3SJohn Marino */ 476*86d7f5d3SJohn Marino #define SCSI_REMOVABLE_MEDIA 0x80 /* Removable Media bit (1=removable) */ 477*86d7f5d3SJohn Marino /* 478*86d7f5d3SJohn Marino * Peripheral Device Type definitions 479*86d7f5d3SJohn Marino */ 480*86d7f5d3SJohn Marino #define SCSI_DASD 0x00 /* Direct-access Device */ 481*86d7f5d3SJohn Marino #define SCSI_SEQACESS 0x01 /* Sequential-access device */ 482*86d7f5d3SJohn Marino #define SCSI_PRINTER 0x02 /* Printer device */ 483*86d7f5d3SJohn Marino #define SCSI_PROCESSOR 0x03 /* Processor device */ 484*86d7f5d3SJohn Marino #define SCSI_WRITEONCE 0x04 /* Write-once device */ 485*86d7f5d3SJohn Marino #define SCSI_CDROM 0x05 /* CD-ROM device */ 486*86d7f5d3SJohn Marino #define SCSI_SCANNER 0x06 /* Scanner device */ 487*86d7f5d3SJohn Marino #define SCSI_OPTICAL 0x07 /* Optical memory device */ 488*86d7f5d3SJohn Marino #define SCSI_MEDCHGR 0x08 /* Medium changer device */ 489*86d7f5d3SJohn Marino #define SCSI_COMM 0x09 /* Communications device */ 490*86d7f5d3SJohn Marino #define SCSI_NODEV 0x1F /* Unknown or no device type */ 491*86d7f5d3SJohn Marino /* 492*86d7f5d3SJohn Marino * Inquiry flag definitions (Inq data byte 7) 493*86d7f5d3SJohn Marino */ 494*86d7f5d3SJohn Marino #define SCSI_INQ_RELADR 0x80 /* device supports relative addressing*/ 495*86d7f5d3SJohn Marino #define SCSI_INQ_WBUS32 0x40 /* device supports 32 bit data xfers */ 496*86d7f5d3SJohn Marino #define SCSI_INQ_WBUS16 0x20 /* device supports 16 bit data xfers */ 497*86d7f5d3SJohn Marino #define SCSI_INQ_SYNC 0x10 /* device supports synchronous xfer */ 498*86d7f5d3SJohn Marino #define SCSI_INQ_LINKED 0x08 /* device supports linked commands */ 499*86d7f5d3SJohn Marino #define SCSI_INQ_CMDQUEUE 0x02 /* device supports command queueing */ 500*86d7f5d3SJohn Marino #define SCSI_INQ_SFTRE 0x01 /* device supports soft resets */ 501*86d7f5d3SJohn Marino /* 502*86d7f5d3SJohn Marino *========================================================== 503*86d7f5d3SJohn Marino * EEPROM byte offset 504*86d7f5d3SJohn Marino *========================================================== 505*86d7f5d3SJohn Marino */ 506*86d7f5d3SJohn Marino typedef struct _EEprom { 507*86d7f5d3SJohn Marino u_int8_t EE_MODE1; 508*86d7f5d3SJohn Marino u_int8_t EE_SPEED; 509*86d7f5d3SJohn Marino u_int8_t xx1; 510*86d7f5d3SJohn Marino u_int8_t xx2; 511*86d7f5d3SJohn Marino } EEprom, *PEEprom; 512*86d7f5d3SJohn Marino 513*86d7f5d3SJohn Marino #define EE_ADAPT_SCSI_ID 64 514*86d7f5d3SJohn Marino #define EE_MODE2 65 515*86d7f5d3SJohn Marino #define EE_DELAY 66 516*86d7f5d3SJohn Marino #define EE_TAG_CMD_NUM 67 517*86d7f5d3SJohn Marino 518*86d7f5d3SJohn Marino /* 519*86d7f5d3SJohn Marino * EE_MODE1 bits definition 520*86d7f5d3SJohn Marino */ 521*86d7f5d3SJohn Marino #define PARITY_CHK_ 0x00000001 522*86d7f5d3SJohn Marino #define SYNC_NEGO_ 0x00000002 523*86d7f5d3SJohn Marino #define EN_DISCONNECT_ 0x00000004 524*86d7f5d3SJohn Marino #define SEND_START_ 0x00000008 525*86d7f5d3SJohn Marino #define TAG_QUEUING_ 0x00000010 526*86d7f5d3SJohn Marino 527*86d7f5d3SJohn Marino /* 528*86d7f5d3SJohn Marino * EE_MODE2 bits definition 529*86d7f5d3SJohn Marino */ 530*86d7f5d3SJohn Marino #define MORE2_DRV 0x00000001 531*86d7f5d3SJohn Marino #define GREATER_1G 0x00000002 532*86d7f5d3SJohn Marino #define RST_SCSI_BUS 0x00000004 533*86d7f5d3SJohn Marino #define ACTIVE_NEGATION 0x00000008 534*86d7f5d3SJohn Marino #define NO_SEEK 0x00000010 535*86d7f5d3SJohn Marino #define LUN_CHECK 0x00000020 536*86d7f5d3SJohn Marino 537*86d7f5d3SJohn Marino #define ENABLE_CE 0x01 538*86d7f5d3SJohn Marino #define DISABLE_CE 0x00 539*86d7f5d3SJohn Marino #define EEPROM_READ 0x80 540*86d7f5d3SJohn Marino 541*86d7f5d3SJohn Marino /* 542*86d7f5d3SJohn Marino * The PCI configuration register offset for TRM_S1040 543*86d7f5d3SJohn Marino * Registers bit Definition 544*86d7f5d3SJohn Marino */ 545*86d7f5d3SJohn Marino #define TRMREG_ID 0x00 /* Vendor and Device ID */ 546*86d7f5d3SJohn Marino #define TRMREG_COMMAND 0x04 /* PCI command register */ 547*86d7f5d3SJohn Marino #define TRMREG_IOBASE 0x10 /* I/O Space base address */ 548*86d7f5d3SJohn Marino #define TRMREG_ROMBASE 0x30 /* Expansion ROM Base Address */ 549*86d7f5d3SJohn Marino #define TRMREG_INTLINE 0x3C /* Interrupt line */ 550*86d7f5d3SJohn Marino 551*86d7f5d3SJohn Marino /* 552*86d7f5d3SJohn Marino * 553*86d7f5d3SJohn Marino * The SCSI register offset for TRM_S1040 554*86d7f5d3SJohn Marino * 555*86d7f5d3SJohn Marino */ 556*86d7f5d3SJohn Marino #define TRMREG_SCSI_STATUS 0x80 /* SCSI Status (R) */ 557*86d7f5d3SJohn Marino /* ######### */ 558*86d7f5d3SJohn Marino #define COMMANDPHASEDONE 0x2000 /* SCSI command phase done */ 559*86d7f5d3SJohn Marino #define SCSIXFERDONE 0x0800 /* SCSI SCSI transfer done */ 560*86d7f5d3SJohn Marino #define SCSIXFERCNT_2_ZERO 0x0100 /* SCSI SCSI transfer count to zero*/ 561*86d7f5d3SJohn Marino #define SCSIINTERRUPT 0x0080 /* SCSI interrupt pending */ 562*86d7f5d3SJohn Marino #define COMMANDABORT 0x0040 /* SCSI command abort */ 563*86d7f5d3SJohn Marino #define SEQUENCERACTIVE 0x0020 /* SCSI sequencer active */ 564*86d7f5d3SJohn Marino #define PHASEMISMATCH 0x0010 /* SCSI phase mismatch */ 565*86d7f5d3SJohn Marino #define PARITYERROR 0x0008 /* SCSI parity error */ 566*86d7f5d3SJohn Marino 567*86d7f5d3SJohn Marino #define PHASEMASK 0x0007 /* Phase MSG/CD/IO */ 568*86d7f5d3SJohn Marino #define PH_DATA_OUT 0x00 /* Data out phase */ 569*86d7f5d3SJohn Marino #define PH_DATA_IN 0x01 /* Data in phase */ 570*86d7f5d3SJohn Marino #define PH_COMMAND 0x02 /* Command phase */ 571*86d7f5d3SJohn Marino #define PH_STATUS 0x03 /* Status phase */ 572*86d7f5d3SJohn Marino #define PH_BUS_FREE 0x05 /* Invalid phase used as bus free */ 573*86d7f5d3SJohn Marino #define PH_MSG_OUT 0x06 /* Message out phase */ 574*86d7f5d3SJohn Marino #define PH_MSG_IN 0x07 /* Message in phase */ 575*86d7f5d3SJohn Marino 576*86d7f5d3SJohn Marino #define TRMREG_SCSI_CONTROL 0x80 /* SCSI Control (W) */ 577*86d7f5d3SJohn Marino /* ######### */ 578*86d7f5d3SJohn Marino #define DO_CLRATN 0x0400 /* Clear ATN */ 579*86d7f5d3SJohn Marino #define DO_SETATN 0x0200 /* Set ATN */ 580*86d7f5d3SJohn Marino #define DO_CMDABORT 0x0100 /* Abort SCSI command */ 581*86d7f5d3SJohn Marino #define DO_RSTMODULE 0x0010 /* Reset SCSI chip */ 582*86d7f5d3SJohn Marino #define DO_RSTSCSI 0x0008 /* Reset SCSI bus */ 583*86d7f5d3SJohn Marino #define DO_CLRFIFO 0x0004 /* Clear SCSI transfer FIFO */ 584*86d7f5d3SJohn Marino #define DO_DATALATCH 0x0002 /* Enable SCSI bus data latch */ 585*86d7f5d3SJohn Marino #define DO_HWRESELECT 0x0001 /* Enable hardware reselection */ 586*86d7f5d3SJohn Marino #define TRMREG_SCSI_FIFOCNT 0x82 /* SCSI FIFO Counter 5bits(R) */ 587*86d7f5d3SJohn Marino #define TRMREG_SCSI_SIGNAL 0x83 /* SCSI low level signal (R/W) */ 588*86d7f5d3SJohn Marino #define TRMREG_SCSI_INTSTATUS 0x84 /* SCSI Interrupt Status (R) */ 589*86d7f5d3SJohn Marino /* ######### */ 590*86d7f5d3SJohn Marino #define INT_SCAM 0x80 /* SCAM selection interrupt */ 591*86d7f5d3SJohn Marino #define INT_SELECT 0x40 /* Selection interrupt */ 592*86d7f5d3SJohn Marino #define INT_SELTIMEOUT 0x20 /* Selection timeout interrupt */ 593*86d7f5d3SJohn Marino #define INT_DISCONNECT 0x10 /* Bus disconnected interrupt */ 594*86d7f5d3SJohn Marino #define INT_RESELECTED 0x08 /* Reselected interrupt */ 595*86d7f5d3SJohn Marino #define INT_SCSIRESET 0x04 /* SCSI reset detected interrupt*/ 596*86d7f5d3SJohn Marino #define INT_BUSSERVICE 0x02 /* Bus service interrupt */ 597*86d7f5d3SJohn Marino #define INT_CMDDONE 0x01 /* SCSI command done interrupt */ 598*86d7f5d3SJohn Marino #define TRMREG_SCSI_OFFSET 0x84 /* SCSI Offset Count (W) */ 599*86d7f5d3SJohn Marino /* 600*86d7f5d3SJohn Marino * Bit Name Definition 601*86d7f5d3SJohn Marino * 07-05 0 RSVD Reversed. Always 0. 602*86d7f5d3SJohn Marino * 04 0 OFFSET4 Reversed for LVDS. Always 0. 603*86d7f5d3SJohn Marino * 03-00 0 OFFSET[03:00] Offset number from 0 to 15 604*86d7f5d3SJohn Marino */ 605*86d7f5d3SJohn Marino #define TRMREG_SCSI_SYNC 0x85 /* SCSI Synchronous Control (R/W)*/ 606*86d7f5d3SJohn Marino /* ######### */ 607*86d7f5d3SJohn Marino #define LVDS_SYNC 0x20 /* Enable LVDS synchronous */ 608*86d7f5d3SJohn Marino #define WIDE_SYNC 0x10 /* Enable WIDE synchronous */ 609*86d7f5d3SJohn Marino #define ALT_SYNC 0x08 /* Enable Fast-20 alternate synchronous */ 610*86d7f5d3SJohn Marino /* 611*86d7f5d3SJohn Marino * SYNCM 7 6 5 4 3 2 1 0 612*86d7f5d3SJohn Marino * Name RSVD RSVD LVDS WIDE ALTPERD PERIOD2 PERIOD1 PERIOD0 613*86d7f5d3SJohn Marino * Default 0 0 0 0 0 0 0 0 614*86d7f5d3SJohn Marino * 615*86d7f5d3SJohn Marino * 616*86d7f5d3SJohn Marino * Bit Name Definition 617*86d7f5d3SJohn Marino * 07-06 0 RSVD Reversed. Always read 0 618*86d7f5d3SJohn Marino * 05 0 LVDS Reversed. Always read 0 619*86d7f5d3SJohn Marino * 04 0 WIDE/WSCSI Enable wide (16-bits) SCSI transfer. 620*86d7f5d3SJohn Marino * 03 0 ALTPERD/ALTPD Alternate (Sync./Period) mode. 621*86d7f5d3SJohn Marino * 622*86d7f5d3SJohn Marino * @@ When this bit is set, 623*86d7f5d3SJohn Marino * the synchronous period bits 2:0 624*86d7f5d3SJohn Marino * in the Synchronous Mode register 625*86d7f5d3SJohn Marino * are used to transfer data 626*86d7f5d3SJohn Marino * at the Fast-20 rate. 627*86d7f5d3SJohn Marino * @@ When this bit is reset, 628*86d7f5d3SJohn Marino * the synchronous period bits 2:0 629*86d7f5d3SJohn Marino * in the Synchronous Mode Register 630*86d7f5d3SJohn Marino * are used to transfer data 631*86d7f5d3SJohn Marino * at the Fast-40 rate. 632*86d7f5d3SJohn Marino * 633*86d7f5d3SJohn Marino * 02-00 0 PERIOD[2:0]/SXPD[02:00] Synchronous SCSI Transfer Rate. 634*86d7f5d3SJohn Marino * These 3 bits specify 635*86d7f5d3SJohn Marino * the Synchronous SCSI Transfer Rate 636*86d7f5d3SJohn Marino * for Fast-20 and Fast-10. 637*86d7f5d3SJohn Marino * These bits are also reset 638*86d7f5d3SJohn Marino * by a SCSI Bus reset. 639*86d7f5d3SJohn Marino * 640*86d7f5d3SJohn Marino * For Fast-10 bit ALTPD = 0 and LVDS = 0 641*86d7f5d3SJohn Marino * and 0x00000004,0x00000002,0x00000001 is defined as follows : 642*86d7f5d3SJohn Marino * 643*86d7f5d3SJohn Marino * 000 100ns, 10.0 Mbytes/s 644*86d7f5d3SJohn Marino * 001 150ns, 6.6 Mbytes/s 645*86d7f5d3SJohn Marino * 010 200ns, 5.0 Mbytes/s 646*86d7f5d3SJohn Marino * 011 250ns, 4.0 Mbytes/s 647*86d7f5d3SJohn Marino * 100 300ns, 3.3 Mbytes/s 648*86d7f5d3SJohn Marino * 101 350ns, 2.8 Mbytes/s 649*86d7f5d3SJohn Marino * 110 400ns, 2.5 Mbytes/s 650*86d7f5d3SJohn Marino * 111 450ns, 2.2 Mbytes/s 651*86d7f5d3SJohn Marino * 652*86d7f5d3SJohn Marino * For Fast-20 bit ALTPD = 1 and LVDS = 0 653*86d7f5d3SJohn Marino * and 0x00000004,0x00000002,0x00000001 is defined as follows : 654*86d7f5d3SJohn Marino * 655*86d7f5d3SJohn Marino * 000 50ns, 20.0 Mbytes/s 656*86d7f5d3SJohn Marino * 001 75ns, 13.3 Mbytes/s 657*86d7f5d3SJohn Marino * 010 100ns, 10.0 Mbytes/s 658*86d7f5d3SJohn Marino * 011 125ns, 8.0 Mbytes/s 659*86d7f5d3SJohn Marino * 100 150ns, 6.6 Mbytes/s 660*86d7f5d3SJohn Marino * 101 175ns, 5.7 Mbytes/s 661*86d7f5d3SJohn Marino * 110 200ns, 5.0 Mbytes/s 662*86d7f5d3SJohn Marino * 111 250ns, 4.0 Mbytes/s 663*86d7f5d3SJohn Marino * 664*86d7f5d3SJohn Marino * For Fast-40 bit ALTPD = 0 and LVDS = 1 665*86d7f5d3SJohn Marino * and 0x00000004,0x00000002,0x00000001 is defined as follows : 666*86d7f5d3SJohn Marino * 667*86d7f5d3SJohn Marino * 000 25ns, 40.0 Mbytes/s 668*86d7f5d3SJohn Marino * 001 50ns, 20.0 Mbytes/s 669*86d7f5d3SJohn Marino * 010 75ns, 13.3 Mbytes/s 670*86d7f5d3SJohn Marino * 011 100ns, 10.0 Mbytes/s 671*86d7f5d3SJohn Marino * 100 125ns, 8.0 Mbytes/s 672*86d7f5d3SJohn Marino * 101 150ns, 6.6 Mbytes/s 673*86d7f5d3SJohn Marino * 110 175ns, 5.7 Mbytes/s 674*86d7f5d3SJohn Marino * 111 200ns, 5.0 Mbytes/s 675*86d7f5d3SJohn Marino */ 676*86d7f5d3SJohn Marino 677*86d7f5d3SJohn Marino /* 678*86d7f5d3SJohn Marino *************************************** 679*86d7f5d3SJohn Marino */ 680*86d7f5d3SJohn Marino #define TRMREG_SCSI_TARGETID 0x86 /* SCSI Target ID (R/W) */ 681*86d7f5d3SJohn Marino /* 682*86d7f5d3SJohn Marino *************************************** 683*86d7f5d3SJohn Marino */ 684*86d7f5d3SJohn Marino #define TRMREG_SCSI_IDMSG 0x87 /* SCSI Identify Message (R) */ 685*86d7f5d3SJohn Marino /* 686*86d7f5d3SJohn Marino *************************************** 687*86d7f5d3SJohn Marino */ 688*86d7f5d3SJohn Marino #define TRMREG_SCSI_HOSTID 0x87 /* SCSI Host ID (W) */ 689*86d7f5d3SJohn Marino /* 690*86d7f5d3SJohn Marino *************************************** 691*86d7f5d3SJohn Marino */ 692*86d7f5d3SJohn Marino #define TRMREG_SCSI_COUNTER 0x88 /* SCSI Transfer Counter 24bits(R/W)*/ 693*86d7f5d3SJohn Marino /* 694*86d7f5d3SJohn Marino *************************************** 695*86d7f5d3SJohn Marino */ 696*86d7f5d3SJohn Marino #define TRMREG_SCSI_INTEN 0x8C /* SCSI Interrupt Enable (R/W) */ 697*86d7f5d3SJohn Marino /* ######### */ 698*86d7f5d3SJohn Marino #define EN_SCAM 0x80 /* Enable SCAM selection interrupt*/ 699*86d7f5d3SJohn Marino #define EN_SELECT 0x40 /* Enable selection interrupt */ 700*86d7f5d3SJohn Marino #define EN_SELTIMEOUT 0x20 /* Enable selection timeout interrupt*/ 701*86d7f5d3SJohn Marino #define EN_DISCONNECT 0x10 /* Enable bus disconnected interrupt*/ 702*86d7f5d3SJohn Marino #define EN_RESELECTED 0x08 /* Enable reselected interrupt */ 703*86d7f5d3SJohn Marino #define EN_SCSIRESET 0x04 /* Enable SCSI reset detected interrupt*/ 704*86d7f5d3SJohn Marino #define EN_BUSSERVICE 0x02 /* Enable bus service interrupt */ 705*86d7f5d3SJohn Marino #define EN_CMDDONE 0x01 /* Enable SCSI command done interrupt*/ 706*86d7f5d3SJohn Marino /* 707*86d7f5d3SJohn Marino *************************************** 708*86d7f5d3SJohn Marino */ 709*86d7f5d3SJohn Marino #define TRMREG_SCSI_CONFIG0 0x8D /* SCSI Configuration 0 (R/W) */ 710*86d7f5d3SJohn Marino /* ######### */ 711*86d7f5d3SJohn Marino #define PHASELATCH 0x40 /* Enable phase latch */ 712*86d7f5d3SJohn Marino #define INITIATOR 0x20 /* Enable initiator mode */ 713*86d7f5d3SJohn Marino #define PARITYCHECK 0x10 /* Enable parity check */ 714*86d7f5d3SJohn Marino #define BLOCKRST 0x01 /* Disable SCSI reset1 */ 715*86d7f5d3SJohn Marino /* 716*86d7f5d3SJohn Marino *************************************** 717*86d7f5d3SJohn Marino */ 718*86d7f5d3SJohn Marino #define TRMREG_SCSI_CONFIG1 0x8E /* SCSI Configuration 1 (R/W) */ 719*86d7f5d3SJohn Marino /* ######### */ 720*86d7f5d3SJohn Marino #define ACTIVE_NEGPLUS 0x10 /* Enhance active negation */ 721*86d7f5d3SJohn Marino #define FILTER_DISABLE 0x08 /* Disable SCSI data filter */ 722*86d7f5d3SJohn Marino #define ACTIVE_NEG 0x02 /* Enable active negation */ 723*86d7f5d3SJohn Marino #define ACTIVE_HISLEW 0x01 /* Enable high slew rate (3/6 ns) */ 724*86d7f5d3SJohn Marino /* 725*86d7f5d3SJohn Marino *************************************** 726*86d7f5d3SJohn Marino */ 727*86d7f5d3SJohn Marino #define TRMREG_SCSI_CONFIG2 0x8F /* SCSI Configuration 2 (R/W) */ 728*86d7f5d3SJohn Marino /* 729*86d7f5d3SJohn Marino *************************************** 730*86d7f5d3SJohn Marino */ 731*86d7f5d3SJohn Marino #define TRMREG_SCSI_COMMAND 0x90 /* SCSI Command (R/W) */ 732*86d7f5d3SJohn Marino /* ######### */ 733*86d7f5d3SJohn Marino #define SCMD_COMP 0x12 /* Command complete */ 734*86d7f5d3SJohn Marino #define SCMD_SEL_ATN 0x60 /* Selection with ATN */ 735*86d7f5d3SJohn Marino #define SCMD_SEL_ATN3 0x64 /* Selection with ATN3 */ 736*86d7f5d3SJohn Marino #define SCMD_SEL_ATNSTOP 0xB8 /* Selection with ATN and Stop */ 737*86d7f5d3SJohn Marino #define SCMD_FIFO_OUT 0xC0 /* SCSI FIFO transfer out */ 738*86d7f5d3SJohn Marino #define SCMD_DMA_OUT 0xC1 /* SCSI DMA transfer out */ 739*86d7f5d3SJohn Marino #define SCMD_FIFO_IN 0xC2 /* SCSI FIFO transfer in */ 740*86d7f5d3SJohn Marino #define SCMD_DMA_IN 0xC3 /* SCSI DMA transfer in */ 741*86d7f5d3SJohn Marino #define SCMD_MSGACCEPT 0xD8 /* Message accept */ 742*86d7f5d3SJohn Marino /* 743*86d7f5d3SJohn Marino * Code Command Description 744*86d7f5d3SJohn Marino * 745*86d7f5d3SJohn Marino * 02 Enable reselection with FIFO 746*86d7f5d3SJohn Marino * 40 Select without ATN with FIFO 747*86d7f5d3SJohn Marino * 60 Select with ATN with FIFO 748*86d7f5d3SJohn Marino * 64 Select with ATN3 with FIFO 749*86d7f5d3SJohn Marino * A0 Select with ATN and stop with FIFO 750*86d7f5d3SJohn Marino * C0 Transfer information out with FIFO 751*86d7f5d3SJohn Marino * C1 Transfer information out with DMA 752*86d7f5d3SJohn Marino * C2 Transfer information in with FIFO 753*86d7f5d3SJohn Marino * C3 Transfer information in with DMA 754*86d7f5d3SJohn Marino * 12 Initiator command complete with FIFO 755*86d7f5d3SJohn Marino * 50 Initiator transfer information out sequence without ATN with FIFO 756*86d7f5d3SJohn Marino * 70 Initiator transfer information out sequence with ATN with FIFO 757*86d7f5d3SJohn Marino * 74 Initiator transfer information out sequence with ATN3 with FIFO 758*86d7f5d3SJohn Marino * 52 Initiator transfer information in sequence without ATN with FIFO 759*86d7f5d3SJohn Marino * 72 Initiator transfer information in sequence with ATN with FIFO 760*86d7f5d3SJohn Marino * 76 Initiator transfer information in sequence with ATN3 with FIFO 761*86d7f5d3SJohn Marino * 90 Initiator transfer information out command complete with FIFO 762*86d7f5d3SJohn Marino * 92 Initiator transfer information in command complete with FIFO 763*86d7f5d3SJohn Marino * D2 Enable selection 764*86d7f5d3SJohn Marino * 08 Reselection 765*86d7f5d3SJohn Marino * 48 Disconnect command with FIFO 766*86d7f5d3SJohn Marino * 88 Terminate command with FIFO 767*86d7f5d3SJohn Marino * C8 Target command complete with FIFO 768*86d7f5d3SJohn Marino * 18 SCAM Arbitration/ Selection 769*86d7f5d3SJohn Marino * 5A Enable reselection 770*86d7f5d3SJohn Marino * 98 Select without ATN with FIFO 771*86d7f5d3SJohn Marino * B8 Select with ATN with FIFO 772*86d7f5d3SJohn Marino * D8 Message Accepted 773*86d7f5d3SJohn Marino * 58 NOP 774*86d7f5d3SJohn Marino */ 775*86d7f5d3SJohn Marino /* 776*86d7f5d3SJohn Marino *************************************** 777*86d7f5d3SJohn Marino */ 778*86d7f5d3SJohn Marino #define TRMREG_SCSI_TIMEOUT 0x91 /* SCSI Time Out Value (R/W) */ 779*86d7f5d3SJohn Marino /* 780*86d7f5d3SJohn Marino *************************************** 781*86d7f5d3SJohn Marino */ 782*86d7f5d3SJohn Marino #define TRMREG_SCSI_FIFO 0x98 /* SCSI FIFO (R/W) */ 783*86d7f5d3SJohn Marino /* 784*86d7f5d3SJohn Marino *************************************** 785*86d7f5d3SJohn Marino */ 786*86d7f5d3SJohn Marino #define TRMREG_SCSI_TCR00 0x9C /* SCSI Target Control 0 (R/W) */ 787*86d7f5d3SJohn Marino /* ######### */ 788*86d7f5d3SJohn Marino #define TCR0_DO_WIDE_NEGO 0x80 /* Do wide NEGO */ 789*86d7f5d3SJohn Marino #define TCR0_DO_SYNC_NEGO 0x40 /* Do sync NEGO */ 790*86d7f5d3SJohn Marino #define TCR0_DISCONNECT_EN 0x20 /* Disconnection enable */ 791*86d7f5d3SJohn Marino #define TCR0_OFFSET_MASK 0x1F /* Offset number */ 792*86d7f5d3SJohn Marino /* 793*86d7f5d3SJohn Marino *************************************** 794*86d7f5d3SJohn Marino */ 795*86d7f5d3SJohn Marino #define TRMREG_SCSI_TCR01 0x9D /* SCSI Target Control 0 (R/W) */ 796*86d7f5d3SJohn Marino /* ######### */ 797*86d7f5d3SJohn Marino #define TCR0_ENABLE_LVDS 0xF8 /* LVD */ 798*86d7f5d3SJohn Marino #define TCR0_ENABLE_WIDE 0xF9 /* SE */ 799*86d7f5d3SJohn Marino /* 800*86d7f5d3SJohn Marino **************************************** 801*86d7f5d3SJohn Marino */ 802*86d7f5d3SJohn Marino 803*86d7f5d3SJohn Marino /* 804*86d7f5d3SJohn Marino *************************************** 805*86d7f5d3SJohn Marino */ 806*86d7f5d3SJohn Marino #define TRMREG_SCSI_TCR1 0x9E /* SCSI Target Control 1 (R/W) */ 807*86d7f5d3SJohn Marino /* ######### */ 808*86d7f5d3SJohn Marino #define MAXTAG_MASK 0x7F00 /* Maximum tags (127) */ 809*86d7f5d3SJohn Marino #define NON_TAG_BUSY 0x0080 /* Non tag command active */ 810*86d7f5d3SJohn Marino #define ACTTAG_MASK 0x007F /* Active tags */ 811*86d7f5d3SJohn Marino /* 812*86d7f5d3SJohn Marino * 813*86d7f5d3SJohn Marino * The DMA register offset for TRM_S1040 814*86d7f5d3SJohn Marino * 815*86d7f5d3SJohn Marino */ 816*86d7f5d3SJohn Marino #define TRMREG_DMA_COMMAND 0xA0 /* DMA Command (R/W) */ 817*86d7f5d3SJohn Marino /* ######### */ 818*86d7f5d3SJohn Marino #define XFERDATAIN 0x0103 /* Transfer data in */ 819*86d7f5d3SJohn Marino #define XFERDATAOUT 0x0102 /* Transfer data out */ 820*86d7f5d3SJohn Marino /* 821*86d7f5d3SJohn Marino *************************************** 822*86d7f5d3SJohn Marino */ 823*86d7f5d3SJohn Marino #define TRMREG_DMA_FIFOCNT 0xA1 /* DMA FIFO Counter (R) */ 824*86d7f5d3SJohn Marino /* 825*86d7f5d3SJohn Marino *************************************** 826*86d7f5d3SJohn Marino */ 827*86d7f5d3SJohn Marino #define TRMREG_DMA_CONTROL 0xA1 /* DMA Control (W) */ 828*86d7f5d3SJohn Marino /* ######### */ 829*86d7f5d3SJohn Marino #define STOPDMAXFER 0x08 /* Stop DMA transfer */ 830*86d7f5d3SJohn Marino #define ABORTXFER 0x04 /* Abort DMA transfer */ 831*86d7f5d3SJohn Marino #define CLRXFIFO 0x02 /* Clear DMA transfer FIFO */ 832*86d7f5d3SJohn Marino #define STARTDMAXFER 0x01 /* Start DMA transfer */ 833*86d7f5d3SJohn Marino /* 834*86d7f5d3SJohn Marino *************************************** 835*86d7f5d3SJohn Marino */ 836*86d7f5d3SJohn Marino #define TRMREG_DMA_STATUS 0xA3 /* DMA Interrupt Status (R/W) */ 837*86d7f5d3SJohn Marino /* ######### */ 838*86d7f5d3SJohn Marino #define XFERPENDING 0x80 /* Transfer pending */ 839*86d7f5d3SJohn Marino #define DMAXFERCOMP 0x02 /* Bus Master XFER Complete status */ 840*86d7f5d3SJohn Marino #define SCSICOMP 0x01 /* SCSI complete interrupt */ 841*86d7f5d3SJohn Marino /* 842*86d7f5d3SJohn Marino *************************************** 843*86d7f5d3SJohn Marino */ 844*86d7f5d3SJohn Marino #define TRMREG_DMA_INTEN 0xA4 /* DMA Interrupt Enable (R/W)*/ 845*86d7f5d3SJohn Marino /* ######### */ 846*86d7f5d3SJohn Marino #define EN_SCSIINTR 0x01 /* Enable SCSI complete interrupt */ 847*86d7f5d3SJohn Marino /* 848*86d7f5d3SJohn Marino *************************************** 849*86d7f5d3SJohn Marino */ 850*86d7f5d3SJohn Marino #define TRMREG_DMA_CONFIG 0xA6 /* DMA Configuration (R/W) */ 851*86d7f5d3SJohn Marino /* ######### */ 852*86d7f5d3SJohn Marino #define DMA_ENHANCE 0x8000 /* Enable DMA enhance feature */ 853*86d7f5d3SJohn Marino /* 854*86d7f5d3SJohn Marino *************************************** 855*86d7f5d3SJohn Marino */ 856*86d7f5d3SJohn Marino #define TRMREG_DMA_XCNT 0xA8 /* DMA Transfer Counter (R/W)*/ 857*86d7f5d3SJohn Marino /* 858*86d7f5d3SJohn Marino *************************************** 859*86d7f5d3SJohn Marino */ 860*86d7f5d3SJohn Marino #define TRMREG_DMA_CXCNT 0xAC /* DMA Current Transfer Counter (R) */ 861*86d7f5d3SJohn Marino /* 862*86d7f5d3SJohn Marino *************************************** 863*86d7f5d3SJohn Marino */ 864*86d7f5d3SJohn Marino #define TRMREG_DMA_XLOWADDR 0xB0 /* DMA Transfer Physical Low Address */ 865*86d7f5d3SJohn Marino /* 866*86d7f5d3SJohn Marino *************************************** 867*86d7f5d3SJohn Marino */ 868*86d7f5d3SJohn Marino #define TRMREG_DMA_XHIGHADDR 0xB4 /* DMA Transfer Physical High Address */ 869*86d7f5d3SJohn Marino 870*86d7f5d3SJohn Marino /* 871*86d7f5d3SJohn Marino * 872*86d7f5d3SJohn Marino * The general register offset for TRM_S1040 873*86d7f5d3SJohn Marino * 874*86d7f5d3SJohn Marino */ 875*86d7f5d3SJohn Marino #define TRMREG_GEN_CONTROL 0xD4 /* Global Control */ 876*86d7f5d3SJohn Marino /* ######### */ 877*86d7f5d3SJohn Marino #define EN_EEPROM 0x10 /* Enable EEPROM programming */ 878*86d7f5d3SJohn Marino #define AUTOTERM 0x04 /* Enable Auto SCSI terminator */ 879*86d7f5d3SJohn Marino #define LOW8TERM 0x02 /* Enable Lower 8 bit SCSI terminator */ 880*86d7f5d3SJohn Marino #define UP8TERM 0x01 /* Enable Upper 8 bit SCSI terminator */ 881*86d7f5d3SJohn Marino /* 882*86d7f5d3SJohn Marino *************************************** 883*86d7f5d3SJohn Marino */ 884*86d7f5d3SJohn Marino #define TRMREG_GEN_STATUS 0xD5 /* Global Status */ 885*86d7f5d3SJohn Marino /* ######### */ 886*86d7f5d3SJohn Marino #define GTIMEOUT 0x80 /* Global timer reach 0 */ 887*86d7f5d3SJohn Marino #define CON5068 0x10 /* External 50/68 pin connected */ 888*86d7f5d3SJohn Marino #define CON68 0x08 /* Internal 68 pin connected */ 889*86d7f5d3SJohn Marino #define CON50 0x04 /* Internal 50 pin connected */ 890*86d7f5d3SJohn Marino #define WIDESCSI 0x02 /* Wide SCSI card */ 891*86d7f5d3SJohn Marino /* 892*86d7f5d3SJohn Marino *************************************** 893*86d7f5d3SJohn Marino */ 894*86d7f5d3SJohn Marino #define TRMREG_GEN_NVRAM 0xD6 /* Serial NON-VOLATILE RAM port */ 895*86d7f5d3SJohn Marino /* ######### */ 896*86d7f5d3SJohn Marino #define NVR_BITOUT 0x08 /* Serial data out */ 897*86d7f5d3SJohn Marino #define NVR_BITIN 0x04 /* Serial data in */ 898*86d7f5d3SJohn Marino #define NVR_CLOCK 0x02 /* Serial clock */ 899*86d7f5d3SJohn Marino #define NVR_SELECT 0x01 /* Serial select */ 900*86d7f5d3SJohn Marino /* 901*86d7f5d3SJohn Marino *************************************** 902*86d7f5d3SJohn Marino */ 903*86d7f5d3SJohn Marino #define TRMREG_GEN_EDATA 0xD7 /* Parallel EEPROM data port */ 904*86d7f5d3SJohn Marino /* 905*86d7f5d3SJohn Marino *************************************** 906*86d7f5d3SJohn Marino */ 907*86d7f5d3SJohn Marino #define TRMREG_GEN_EADDRESS 0xD8 /* Parallel EEPROM address */ 908*86d7f5d3SJohn Marino /* 909*86d7f5d3SJohn Marino *************************************** 910*86d7f5d3SJohn Marino */ 911*86d7f5d3SJohn Marino #define TRMREG_GEN_TIMER 0xDB /* Global timer */ 912*86d7f5d3SJohn Marino 913*86d7f5d3SJohn Marino /* 914*86d7f5d3SJohn Marino * The SEEPROM structure for TRM_S1040 915*86d7f5d3SJohn Marino */ 916*86d7f5d3SJohn Marino typedef struct NVRAM_TARGET_STRUCT 917*86d7f5d3SJohn Marino { 918*86d7f5d3SJohn Marino u_int8_t NvmTarCfg0; /* Target configuration byte 0 */ 919*86d7f5d3SJohn Marino u_int8_t NvmTarPeriod; /* Target period */ 920*86d7f5d3SJohn Marino u_int8_t NvmTarCfg2; /* Target configuration byte 2 */ 921*86d7f5d3SJohn Marino u_int8_t NvmTarCfg3; /* Target configuration byte 3 */ 922*86d7f5d3SJohn Marino } NVRAMTARGETTYPE; 923*86d7f5d3SJohn Marino /* NvmTarCfg0: Target configuration byte 0 :..pDCB->DevMode */ 924*86d7f5d3SJohn Marino #define NTC_DO_WIDE_NEGO 0x20 /* Wide negotiate */ 925*86d7f5d3SJohn Marino #define NTC_DO_TAG_QUEUING 0x10 /* Enable SCSI tag queuing */ 926*86d7f5d3SJohn Marino #define NTC_DO_SEND_START 0x08 /* Send start command SPINUP*/ 927*86d7f5d3SJohn Marino #define NTC_DO_DISCONNECT 0x04 /* Enable SCSI disconnect */ 928*86d7f5d3SJohn Marino #define NTC_DO_SYNC_NEGO 0x02 /* Sync negotiation */ 929*86d7f5d3SJohn Marino #define NTC_DO_PARITY_CHK 0x01 /* (it sould define at NAC ) 930*86d7f5d3SJohn Marino Parity check enable */ 931*86d7f5d3SJohn Marino 932*86d7f5d3SJohn Marino /* 933*86d7f5d3SJohn Marino * 934*86d7f5d3SJohn Marino * 935*86d7f5d3SJohn Marino * 936*86d7f5d3SJohn Marino */ 937*86d7f5d3SJohn Marino typedef struct NVRAM_STRUC { 938*86d7f5d3SJohn Marino u_int8_t NvramSubVendorID[2]; /*0,1 Sub Vendor ID */ 939*86d7f5d3SJohn Marino u_int8_t NvramSubSysID[2]; /*2,3 Sub System ID*/ 940*86d7f5d3SJohn Marino u_int8_t NvramSubClass; /*4 Sub Class */ 941*86d7f5d3SJohn Marino u_int8_t NvramVendorID[2]; /*5,6 Vendor ID */ 942*86d7f5d3SJohn Marino u_int8_t NvramDeviceID[2]; /*7,8 Device ID */ 943*86d7f5d3SJohn Marino u_int8_t NvramReserved; /*9 Reserved */ 944*86d7f5d3SJohn Marino NVRAMTARGETTYPE NvramTarget[TRM_MAX_TARGETS];/* *10,11,12,13 945*86d7f5d3SJohn Marino *14,15,16,17 * .... 946*86d7f5d3SJohn Marino * .... 947*86d7f5d3SJohn Marino *70,71,72,73 948*86d7f5d3SJohn Marino */ 949*86d7f5d3SJohn Marino u_int8_t NvramScsiId; /*74 Host Adapter SCSI ID */ 950*86d7f5d3SJohn Marino u_int8_t NvramChannelCfg; /*75 Channel configuration */ 951*86d7f5d3SJohn Marino u_int8_t NvramDelayTime; /*76 Power on delay time */ 952*86d7f5d3SJohn Marino u_int8_t NvramMaxTag; /*77 Maximum tags */ 953*86d7f5d3SJohn Marino u_int8_t NvramReserved0; /*78 */ 954*86d7f5d3SJohn Marino u_int8_t NvramBootTarget; /*79 */ 955*86d7f5d3SJohn Marino u_int8_t NvramBootLun; /*80 */ 956*86d7f5d3SJohn Marino u_int8_t NvramReserved1; /*81 */ 957*86d7f5d3SJohn Marino u_int16_t Reserved[22]; /*82,..125 */ 958*86d7f5d3SJohn Marino u_int16_t NvramCheckSum; /*126,127*/ 959*86d7f5d3SJohn Marino } NVRAMTYPE,*PNVRAMTYPE; 960*86d7f5d3SJohn Marino /* Nvram Initiater bits definition */ 961*86d7f5d3SJohn Marino #define MORE2_DRV 0x00000001 962*86d7f5d3SJohn Marino #define GREATER_1G 0x00000002 963*86d7f5d3SJohn Marino #define RST_SCSI_BUS 0x00000004 964*86d7f5d3SJohn Marino #define ACTIVE_NEGATION 0x00000008 965*86d7f5d3SJohn Marino #define NO_SEEK 0x00000010 966*86d7f5d3SJohn Marino #define LUN_CHECK 0x00000020 967*86d7f5d3SJohn Marino 968*86d7f5d3SJohn Marino /* Nvram Adapter NvramChannelCfg bits definition */ 969*86d7f5d3SJohn Marino #define NAC_SCANLUN 0x20 /* Include LUN as BIOS device*/ 970*86d7f5d3SJohn Marino #define NAC_POWERON_SCSI_RESET 0x04 /* Power on reset enable */ 971*86d7f5d3SJohn Marino #define NAC_GREATER_1G 0x02 /* > 1G support enable */ 972*86d7f5d3SJohn Marino #define NAC_GT2DRIVES 0x01 /* Support more than 2 drives*/ 973*86d7f5d3SJohn Marino /* 974*86d7f5d3SJohn Marino *#define NAC_DO_PARITY_CHK 0x08 // Parity check enable 975*86d7f5d3SJohn Marino */ 976*86d7f5d3SJohn Marino 977*86d7f5d3SJohn Marino #endif /* trm_H */ 978