1139749Simp/*- 2105059Scognet * File Name : trm.h 3105059Scognet * 4105059Scognet * Tekram DC395U/UW/F ,DC315/U 5105059Scognet * PCI SCSI Bus Master Host Adapter Device Driver 6105059Scognet * (SCSI chip set used Tekram ASIC TRM-S1040) 7105059Scognet * 8139749Simp * (C)Copyright 1995-2001 Tekram Technology Co.,Ltd. 9139749Simp * 10105059Scognet * Redistribution and use in source and binary forms, with or without 11105059Scognet * modification, are permitted provided that the following conditions 12105059Scognet * are met: 13105059Scognet * 1. Redistributions of source code must retain the above copyright 14105059Scognet * notice, this list of conditions and the following disclaimer. 15105059Scognet * 2. Redistributions in binary form must reproduce the above copyright 16105059Scognet * notice, this list of conditions and the following disclaimer in the 17105059Scognet * documentation and/or other materials provided with the distribution. 18105059Scognet * 3. The name of the author may not be used to endorse or promote products 19105059Scognet * derived from this software without specific prior written permission. 20105059Scognet * 21105059Scognet * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22105059Scognet * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23105059Scognet * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24105059Scognet * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 25105059Scognet * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26105059Scognet * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27105059Scognet * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28105059Scognet * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29105059Scognet * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30105059Scognet * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31105059Scognet * 32105059Scognet * $FreeBSD$ 33105059Scognet */ 34105059Scognet 35105059Scognet#ifndef trm_H 36105059Scognet#define trm_H 37105059Scognet 38105059Scognet/* SCSI CAM */ 39105059Scognet 40105059Scognet#define TRM_TRANS_CUR 0x01 /* Modify current neogtiation status */ 41105059Scognet#define TRM_TRANS_ACTIVE 0x03 /* Assume this is the active target */ 42105059Scognet#define TRM_TRANS_GOAL 0x04 /* Modify negotiation goal */ 43105059Scognet#define TRM_TRANS_USER 0x08 /* Modify user negotiation settings */ 44105059Scognet 45105059Scognetstruct trm_transinfo { 46105059Scognet u_int8_t width; 47105059Scognet u_int8_t period; 48105059Scognet u_int8_t offset; 49105059Scognet}; 50105059Scognet 51105059Scognetstruct trm_target_info { 52105059Scognet u_int8_t disc_tag; /* bits define..... */ 53105059Scognet#define TRM_CUR_DISCENB 0x01 /* current setting disconnect enable */ 54105059Scognet#define TRM_CUR_TAGENB 0x02 /* current setting tag command Q enable */ 55105059Scognet#define TRM_USR_DISCENB 0x04 /* user adapter device setting disconnect enable */ 56105059Scognet#define TRM_USR_TAGENB 0x08 /* user adapter device setting tag command Q enable*/ 57105059Scognet struct trm_transinfo current; /* info of current */ 58105059Scognet struct trm_transinfo goal; /* info of after negotiating */ 59105059Scognet struct trm_transinfo user; /* info of user adapter device setting */ 60105059Scognet}; 61105059Scognet/* 62105059Scognet * SCSI CAM ** 63105059Scognet */ 64105059Scognet 65105059Scognet/* 66105059Scognet * bus_dma_segment_t 67105059Scognet * 68105059Scognet * Describes a single contiguous DMA transaction. Values 69105059Scognet * are suitable for programming into DMA registers. 70105059Scognet * 71105059Scognet *typedef struct bus_dma_segment 72105059Scognet *{ 73105059Scognet * bus_addr_t ds_addr; // DMA address 74105059Scognet * bus_size_t ds_len; // length of transfer 75105059Scognet *} bus_dma_segment_t; 76105059Scognet */ 77105059Scognet 78105059Scognet/*;----------------------Segment Entry------------------------------------*/ 79105059Scognettypedef struct _SGentry { 80111158Scognet u_int32_t address; 81111158Scognet u_int32_t length; 82105059Scognet} SGentry, *PSEG; 83105059Scognet/* 84105059Scognet *----------------------------------------------------------------------- 85105059Scognet * feature of chip set MAX value 86105059Scognet *----------------------------------------------------------------------- 87105059Scognet */ 88105059Scognet 89111158Scognet#define TRM_MAX_ADAPTER_NUM 4 90111158Scognet#define TRM_MAX_DEVICES 16 91111158Scognet#define TRM_MAX_SG_LISTENTRY 32 92111158Scognet#define TRM_MAX_TARGETS 16 93111158Scognet#define TRM_MAX_TAGS_CMD_QUEUE 256 /* MAX_CMD_QUEUE 20*/ 94111158Scognet#define TRM_MAX_CMD_PER_LUN 32 95111158Scognet#define TRM_MAX_SRB_CNT 256 96111158Scognet#define TRM_MAX_START_JOB 256 97195534Sscottl#define TRM_MAXPHYS (128 * 1024) 98195534Sscottl#define TRM_NSEG (btoc(TRM_MAXPHYS) + 1) 99105059Scognet#define TRM_MAXTRANSFER_SIZE 0xFFFFFF /* restricted by 24 bit counter */ 100105059Scognet#define PAGELEN 4096 101105059Scognet 102105059Scognet#define SEL_TIMEOUT 153 /* 250 ms selection timeout (@ 40MHz) */ 103105059Scognet 104105059Scognet/* 105105059Scognet * CAM ccb 106105059Scognet * Union of all CCB types for kernel space allocation. This union should 107105059Scognet * never be used for manipulating CCBs - its only use is for the allocation 108105059Scognet * and deallocation of raw CCB space and is the return type of xpt_ccb_alloc 109105059Scognet * and the argument to xpt_ccb_free. 110105059Scognet * 111105059Scognet *union ccb { 112105059Scognet * struct ccb_hdr ccb_h; // For convenience 113105059Scognet * struct ccb_scsiio csio; 114105059Scognet * struct ccb_getdev cgd; 115105059Scognet * struct ccb_getdevlist cgdl; 116105059Scognet * struct ccb_pathinq cpi; 117105059Scognet * struct ccb_relsim crs; 118105059Scognet * struct ccb_setasync csa; 119105059Scognet * struct ccb_setdev csd; 120105059Scognet * struct ccb_dev_match cdm; 121105059Scognet * struct ccb_trans_settings cts; 122105059Scognet * struct ccb_calc_geometry ccg; 123105059Scognet * struct ccb_abort cab; 124105059Scognet * struct ccb_resetbus crb; 125105059Scognet * struct ccb_resetdev crd; 126105059Scognet * struct ccb_termio tio; 127105059Scognet * struct ccb_accept_tio atio; 128105059Scognet * struct ccb_scsiio ctio; 129105059Scognet * struct ccb_en_lun cel; 130105059Scognet * struct ccb_immed_notify cin; 131105059Scognet * struct ccb_notify_ack cna; 132105059Scognet * struct ccb_eng_inq cei; 133105059Scognet * struct ccb_eng_exec cee; 134105059Scognet * struct ccb_rescan crcn; 135105059Scognet * struct ccb_debug cdbg; 136105059Scognet * }; 137105059Scognet */ 138105059Scognet 139105059Scognet/* 140105059Scognet *----------------------------------------------------------------------- 141105059Scognet * SCSI Request Block 142105059Scognet *----------------------------------------------------------------------- 143105059Scognet */ 144105059Scognetstruct _SRB { 145105059Scognet u_int8_t CmdBlock[12]; 146105059Scognet u_long Segment0[2]; 147105059Scognet u_long Segment1[2]; 148105059Scognet struct _SRB *pNextSRB; 149105059Scognet struct _DCB *pSRBDCB; 150105059Scognet SGentry SgSenseTemp; 151111158Scognet 152111158Scognet PSEG pSRBSGL; /* scatter gather list */ 153111158Scognet 154111158Scognet u_int32_t SRBSGPhyAddr; /* a segment starting address */ 155111158Scognet u_int32_t SRBTotalXferLength; 156111158Scognet 157105059Scognet /* 158105059Scognet * CAM ccb 159105059Scognet */ 160111158Scognet union ccb *pccb; 161111158Scognet bus_dmamap_t sg_dmamap; 162105059Scognet bus_dmamap_t dmamap; 163105059Scognet u_int16_t SRBState; 164105059Scognet u_int8_t * pMsgPtr; 165105059Scognet 166105059Scognet u_int8_t SRBSGCount; 167105059Scognet u_int8_t SRBSGIndex; 168105059Scognet u_int8_t MsgInBuf[6]; 169105059Scognet u_int8_t MsgOutBuf[6]; 170105059Scognet 171105059Scognet u_int8_t AdaptStatus; 172105059Scognet u_int8_t TargetStatus; 173105059Scognet u_int8_t MsgCnt; 174105059Scognet u_int8_t TagNumber; 175105059Scognet 176105059Scognet u_int8_t SRBStatus; 177105059Scognet u_int8_t RetryCnt; 178105059Scognet u_int8_t SRBFlag; 179105059Scognet u_int8_t ScsiCmdLen; 180105059Scognet u_int8_t ScsiPhase; 181105059Scognet u_int8_t Reserved[3]; /*;for dword alignment */ 182105059Scognet}; 183105059Scognettypedef struct _SRB TRM_SRB, *PSRB; 184105059Scognet 185105059Scognet/* 186105059Scognet *----------------------------------------------------------------------- 187105059Scognet * Device Control Block 188105059Scognet *----------------------------------------------------------------------- 189105059Scognet */ 190105059Scognetstruct _DCB 191105059Scognet{ 192105059Scognet PSRB pWaitingSRB; 193111158Scognet PSRB pWaitingLastSRB; 194105059Scognet 195105059Scognet PSRB pGoingSRB; 196105059Scognet PSRB pGoingLastSRB; 197105059Scognet 198105059Scognet PSRB pActiveSRB; 199105059Scognet 200105059Scognet u_int16_t GoingSRBCnt; 201111158Scognet u_int16_t MaxActiveCommandCnt; 202105059Scognet 203111158Scognet u_int8_t TargetID; /*; SCSI Target ID (SCSI Only) */ 204111158Scognet u_int8_t TargetLUN; /*; SCSI Log. Unit (SCSI Only) */ 205105059Scognet u_int8_t DCBFlag; 206105059Scognet u_int8_t DevType; 207105059Scognet 208105059Scognet u_int8_t SyncMode; /* mode ? (1 sync):(0 async) */ 209105059Scognet u_int8_t MaxNegoPeriod; /* for nego. */ 210105059Scognet u_int8_t SyncPeriod; /* for reg. */ 211105059Scognet u_int8_t SyncOffset; /* for reg. and nego.(low nibble) */ 212105059Scognet 213105059Scognet u_int8_t DevMode; 214105059Scognet u_int8_t AdpMode; 215105059Scognet 216105059Scognet u_int8_t IdentifyMsg; 217111158Scognet u_int8_t DCBstatus; /* DCB status */ 218111158Scognet /*u_int8_t Reserved[3]; for dword alignment */ 219111158Scognet struct trm_target_info tinfo; /* 10 bytes */ 220111158Scognet struct _DCB *pNextDCB; 221105059Scognet}; 222105059Scognettypedef struct _DCB TRM_DCB, *PDCB; 223105059Scognet 224105059Scognet/* 225105059Scognet *----------------------------------------------------------------------- 226105059Scognet * Adapter Control Block 227105059Scognet *----------------------------------------------------------------------- 228105059Scognet */ 229105059Scognetstruct _ACB 230105059Scognet{ 231111158Scognet device_t dev; 232111158Scognet 233105059Scognet bus_space_tag_t tag; 234105059Scognet bus_space_handle_t bsh; 235111158Scognet bus_dma_tag_t parent_dmat; 236105059Scognet bus_dma_tag_t buffer_dmat; /* dmat for buffer I/O */ 237111158Scognet bus_dma_tag_t srb_dmat; 238111158Scognet bus_dma_tag_t sense_dmat; /* dmat for sense buffer */ 239126725Scognet bus_dma_tag_t sg_dmat; 240111158Scognet bus_dmamap_t sense_dmamap; 241111158Scognet bus_dmamap_t srb_dmamap; 242111158Scognet bus_addr_t sense_busaddr; 243111158Scognet struct scsi_sense_data *sense_buffers; 244107928Scognet struct resource *iores, *irq; 245107928Scognet void *ih; 246105059Scognet /* 247105059Scognet * CAM SIM/XPT 248105059Scognet */ 249105059Scognet struct cam_sim *psim; 250105059Scognet struct cam_path *ppath; 251105059Scognet 252111158Scognet TRM_SRB TmpSRB; 253111158Scognet TRM_DCB DCBarray[16][8]; 254105059Scognet 255111158Scognet u_int32_t srb_physbase; 256111158Scognet 257105059Scognet PSRB pFreeSRB; 258105059Scognet PDCB pActiveDCB; 259105059Scognet 260105059Scognet PDCB pLinkDCB; 261105059Scognet PDCB pDCBRunRobin; 262105059Scognet 263105059Scognet u_int16_t max_id; 264105059Scognet u_int16_t max_lun; 265105059Scognet 266105059Scognet u_int8_t msgin123[4]; 267105059Scognet 268105059Scognet u_int8_t scan_devices[16][8]; 269105059Scognet 270105059Scognet u_int8_t AdaptSCSIID; /*; Adapter SCSI Target ID */ 271105059Scognet u_int8_t AdaptSCSILUN; /*; Adapter SCSI LUN */ 272105059Scognet u_int8_t DeviceCnt; 273105059Scognet u_int8_t ACBFlag; 274105059Scognet 275105059Scognet u_int8_t TagMaxNum; 276105059Scognet u_int8_t Config; 277111158Scognet u_int8_t AdaptType; 278111158Scognet u_int8_t AdapterUnit; /* nth Adapter this driver */ 279105059Scognet}; 280105059Scognettypedef struct _ACB TRM_ACB, *PACB; 281105059Scognet/* 282105059Scognet * ----SRB State machine definition 283105059Scognet */ 284105059Scognet#define SRB_FREE 0x0000 285105059Scognet#define SRB_WAIT 0x0001 286105059Scognet#define SRB_READY 0x0002 287105059Scognet#define SRB_MSGOUT 0x0004 /*arbitration+msg_out 1st byte*/ 288105059Scognet#define SRB_MSGIN 0x0008 289105059Scognet#define SRB_EXTEND_MSGIN 0x0010 290105059Scognet#define SRB_COMMAND 0x0020 291105059Scognet#define SRB_START_ 0x0040 /*arbitration+msg_out+command_out*/ 292105059Scognet#define SRB_DISCONNECT 0x0080 293105059Scognet#define SRB_DATA_XFER 0x0100 294105059Scognet#define SRB_XFERPAD 0x0200 295105059Scognet#define SRB_STATUS 0x0400 296105059Scognet#define SRB_COMPLETED 0x0800 297105059Scognet#define SRB_ABORT_SENT 0x1000 298105059Scognet#define SRB_DO_SYNC_NEGO 0x2000 299105059Scognet#define SRB_DO_WIDE_NEGO 0x4000 300105059Scognet#define SRB_UNEXPECT_RESEL 0x8000 301105059Scognet/* 302105059Scognet * 303105059Scognet * ACB Config 304105059Scognet * 305105059Scognet */ 306105059Scognet#define HCC_WIDE_CARD 0x20 307105059Scognet#define HCC_SCSI_RESET 0x10 308105059Scognet#define HCC_PARITY 0x08 309105059Scognet#define HCC_AUTOTERM 0x04 310105059Scognet#define HCC_LOW8TERM 0x02 311105059Scognet#define HCC_UP8TERM 0x01 312105059Scognet/* 313105059Scognet * ---ACB Flag 314105059Scognet */ 315105059Scognet#define RESET_DEV 0x00000001 316105059Scognet#define RESET_DETECT 0x00000002 317105059Scognet#define RESET_DONE 0x00000004 318105059Scognet 319105059Scognet/* 320105059Scognet * ---DCB Flag 321105059Scognet */ 322105059Scognet#define ABORT_DEV_ 0x00000001 323105059Scognet 324105059Scognet/* 325111158Scognet * ---DCB status 326111158Scognet */ 327111158Scognet#define DS_IN_QUEUE 0x00000001 328111158Scognet 329111158Scognet/* 330105059Scognet * ---SRB status 331105059Scognet */ 332105059Scognet#define SRB_OK 0x00000001 333105059Scognet#define ABORTION 0x00000002 334105059Scognet#define OVER_RUN 0x00000004 335105059Scognet#define UNDER_RUN 0x00000008 336105059Scognet#define PARITY_ERROR 0x00000010 337105059Scognet#define SRB_ERROR 0x00000020 338105059Scognet 339105059Scognet/* 340105059Scognet * ---SRB Flag 341105059Scognet */ 342105059Scognet#define DATAOUT 0x00000080 343105059Scognet#define DATAIN 0x00000040 344105059Scognet#define RESIDUAL_VALID 0x00000020 345105059Scognet#define ENABLE_TIMER 0x00000010 346105059Scognet#define RESET_DEV0 0x00000004 347105059Scognet#define ABORT_DEV 0x00000002 348105059Scognet#define AUTO_REQSENSE 0x00000001 349105059Scognet 350105059Scognet/* 351105059Scognet * ---Adapter status 352105059Scognet */ 353105059Scognet#define H_STATUS_GOOD 0x00 354105059Scognet#define H_SEL_TIMEOUT 0x11 355105059Scognet#define H_OVER_UNDER_RUN 0x12 356105059Scognet#define H_UNEXP_BUS_FREE 0x13 357105059Scognet#define H_TARGET_PHASE_F 0x14 358105059Scognet#define H_INVALID_CCB_OP 0x16 359105059Scognet#define H_LINK_CCB_BAD 0x17 360105059Scognet#define H_BAD_TARGET_DIR 0x18 361105059Scognet#define H_DUPLICATE_CCB 0x19 362105059Scognet#define H_BAD_CCB_OR_SG 0x1A 363105059Scognet#define H_ABORT 0x0FF 364105059Scognet 365105059Scognet/* 366105059Scognet * ---SCSI Status byte codes 367105059Scognet */ 368105059Scognet#define SCSI_STAT_GOOD 0x00 /*; Good status */ 369105059Scognet#define SCSI_STAT_CHECKCOND 0x02 /*; SCSI Check Condition */ 370105059Scognet#define SCSI_STAT_CONDMET 0x04 /*; Condition Met */ 371105059Scognet#define SCSI_STAT_BUSY 0x08 /*; Target busy status */ 372105059Scognet#define SCSI_STAT_INTER 0x10 /*; Intermediate status */ 373105059Scognet#define SCSI_STAT_INTERCONDMET 0x14 /*; Intermediate condition met */ 374105059Scognet#define SCSI_STAT_RESCONFLICT 0x18 /*; Reservation conflict */ 375105059Scognet#define SCSI_STAT_CMDTERM 0x22 /*; Command Terminated */ 376105059Scognet#define SCSI_STAT_QUEUEFULL 0x28 /*; Queue Full */ 377105059Scognet#define SCSI_STAT_UNEXP_BUS_F 0xFD /*; Unexpect Bus Free */ 378105059Scognet#define SCSI_STAT_BUS_RST_DETECT 0xFE /*; Scsi Bus Reset detected */ 379105059Scognet#define SCSI_STAT_SEL_TIMEOUT 0xFF /*; Selection Time out */ 380105059Scognet 381105059Scognet/* 382105059Scognet * ---Sync_Mode 383105059Scognet */ 384105059Scognet#define SYNC_WIDE_TAG_ATNT_DISABLE 0x00000000 385105059Scognet#define SYNC_NEGO_ENABLE 0x00000001 386105059Scognet#define SYNC_NEGO_DONE 0x00000002 387105059Scognet#define WIDE_NEGO_ENABLE 0x00000004 388105059Scognet#define WIDE_NEGO_DONE 0x00000008 389105059Scognet#define EN_TAG_QUEUING 0x00000010 390105059Scognet#define EN_ATN_STOP 0x00000020 391105059Scognet 392105059Scognet#define SYNC_NEGO_OFFSET 15 393105059Scognet/* 394105059Scognet * ---SCSI bus phase 395105059Scognet */ 396105059Scognet#define SCSI_DATA_OUT_ 0 397105059Scognet#define SCSI_DATA_IN_ 1 398105059Scognet#define SCSI_COMMAND 2 399105059Scognet#define SCSI_STATUS_ 3 400105059Scognet#define SCSI_NOP0 4 401105059Scognet#define SCSI_NOP1 5 402105059Scognet#define SCSI_MSG_OUT 6 403105059Scognet#define SCSI_MSG_IN 7 404105059Scognet 405105059Scognet/* 406105059Scognet * ----SCSI MSG u_int8_t 407105059Scognet */ 408105059Scognet#define MSG_COMPLETE 0x00 409105059Scognet#define MSG_EXTENDED 0x01 410105059Scognet#define MSG_SAVE_PTR 0x02 411105059Scognet#define MSG_RESTORE_PTR 0x03 412105059Scognet#define MSG_DISCONNECT 0x04 413105059Scognet#define MSG_INITIATOR_ERROR 0x05 414105059Scognet#define MSG_ABORT 0x06 415105059Scognet#define MSG_REJECT_ 0x07 416105059Scognet#define MSG_NOP 0x08 417105059Scognet#define MSG_PARITY_ERROR 0x09 418105059Scognet#define MSG_LINK_CMD_COMPL 0x0A 419105059Scognet#define MSG_LINK_CMD_COMPL_FLG 0x0B 420105059Scognet#define MSG_BUS_RESET 0x0C 421111158Scognet/* #define MSG_ABORT_TAG 0x0D */ 422105059Scognet#define MSG_SIMPLE_QTAG 0x20 423105059Scognet#define MSG_HEAD_QTAG 0x21 424105059Scognet#define MSG_ORDER_QTAG 0x22 425105059Scognet#define MSG_IGNOREWIDE 0x23 426111158Scognet/* #define MSG_IDENTIFY 0x80 */ 427105059Scognet#define MSG_HOST_ID 0xC0 428105059Scognet/* bus wide length */ 429105059Scognet#define MSG_EXT_WDTR_BUS_8_BIT 0x00 430105059Scognet#define MSG_EXT_WDTR_BUS_16_BIT 0x01 431105059Scognet#define MSG_EXT_WDTR_BUS_32_BIT 0x02 432105059Scognet/* 433105059Scognet * ----SCSI STATUS u_int8_t 434105059Scognet */ 435105059Scognet#define STATUS_GOOD 0x00 436105059Scognet#define CHECK_CONDITION_ 0x02 437105059Scognet#define STATUS_BUSY 0x08 438105059Scognet#define STATUS_INTERMEDIATE 0x10 439105059Scognet#define RESERVE_CONFLICT 0x18 440105059Scognet 441105059Scognet/* 442105059Scognet * ---- cmd->result 443105059Scognet */ 444105059Scognet#define STATUS_MASK_ 0xFF 445105059Scognet#define MSG_MASK 0xFF00 446105059Scognet#define RETURN_MASK 0xFF0000 447105059Scognet 448105059Scognet/* 449105059Scognet * Inquiry Data format 450105059Scognet */ 451105059Scognet 452105059Scognettypedef struct _SCSIInqData { /* INQ */ 453105059Scognet 454105059Scognet u_int8_t DevType; /* Periph Qualifier & Periph Dev Type */ 455105059Scognet u_int8_t RMB_TypeMod; /* rem media bit & Dev Type Modifier */ 456105059Scognet u_int8_t Vers; /* ISO, ECMA, & ANSI versions */ 457105059Scognet u_int8_t RDF; /* AEN, TRMIOP, & response data format*/ 458105059Scognet u_int8_t AddLen; /* length of additional data */ 459105059Scognet u_int8_t Res1; /* reserved */ 460105059Scognet u_int8_t Res2; /* reserved */ 461105059Scognet u_int8_t Flags; /* RelADr,Wbus32,Wbus16,Sync,etc. */ 462105059Scognet u_int8_t VendorID[8]; /* Vendor Identification */ 463105059Scognet u_int8_t ProductID[16]; /* Product Identification */ 464105059Scognet u_int8_t ProductRev[4]; /* Product Revision */ 465105059Scognet} SCSI_INQDATA, *PSCSI_INQDATA; 466105059Scognet 467105059Scognet 468105059Scognet/* 469105059Scognet * Inquiry byte 0 masks 470105059Scognet */ 471105059Scognet#define SCSI_DEVTYPE 0x1F /* Peripheral Device Type */ 472105059Scognet#define SCSI_PERIPHQUAL 0xE0 /* Peripheral Qualifier */ 473105059Scognet/* 474105059Scognet * Inquiry byte 1 mask 475105059Scognet */ 476105059Scognet#define SCSI_REMOVABLE_MEDIA 0x80 /* Removable Media bit (1=removable) */ 477105059Scognet/* 478105059Scognet * Peripheral Device Type definitions 479105059Scognet */ 480105059Scognet#define SCSI_DASD 0x00 /* Direct-access Device */ 481105059Scognet#define SCSI_SEQACESS 0x01 /* Sequential-access device */ 482105059Scognet#define SCSI_PRINTER 0x02 /* Printer device */ 483105059Scognet#define SCSI_PROCESSOR 0x03 /* Processor device */ 484105059Scognet#define SCSI_WRITEONCE 0x04 /* Write-once device */ 485105059Scognet#define SCSI_CDROM 0x05 /* CD-ROM device */ 486105059Scognet#define SCSI_SCANNER 0x06 /* Scanner device */ 487105059Scognet#define SCSI_OPTICAL 0x07 /* Optical memory device */ 488105059Scognet#define SCSI_MEDCHGR 0x08 /* Medium changer device */ 489105059Scognet#define SCSI_COMM 0x09 /* Communications device */ 490105059Scognet#define SCSI_NODEV 0x1F /* Unknown or no device type */ 491105059Scognet/* 492105059Scognet * Inquiry flag definitions (Inq data byte 7) 493105059Scognet */ 494105059Scognet#define SCSI_INQ_RELADR 0x80 /* device supports relative addressing*/ 495105059Scognet#define SCSI_INQ_WBUS32 0x40 /* device supports 32 bit data xfers */ 496105059Scognet#define SCSI_INQ_WBUS16 0x20 /* device supports 16 bit data xfers */ 497105059Scognet#define SCSI_INQ_SYNC 0x10 /* device supports synchronous xfer */ 498105059Scognet#define SCSI_INQ_LINKED 0x08 /* device supports linked commands */ 499105059Scognet#define SCSI_INQ_CMDQUEUE 0x02 /* device supports command queueing */ 500105059Scognet#define SCSI_INQ_SFTRE 0x01 /* device supports soft resets */ 501105059Scognet/* 502105059Scognet *========================================================== 503105059Scognet * EEPROM byte offset 504105059Scognet *========================================================== 505105059Scognet */ 506105059Scognettypedef struct _EEprom { 507105059Scognet u_int8_t EE_MODE1; 508105059Scognet u_int8_t EE_SPEED; 509105059Scognet u_int8_t xx1; 510105059Scognet u_int8_t xx2; 511105059Scognet} EEprom, *PEEprom; 512105059Scognet 513105059Scognet#define EE_ADAPT_SCSI_ID 64 514105059Scognet#define EE_MODE2 65 515105059Scognet#define EE_DELAY 66 516105059Scognet#define EE_TAG_CMD_NUM 67 517105059Scognet 518105059Scognet/* 519105059Scognet * EE_MODE1 bits definition 520105059Scognet */ 521105059Scognet#define PARITY_CHK_ 0x00000001 522105059Scognet#define SYNC_NEGO_ 0x00000002 523105059Scognet#define EN_DISCONNECT_ 0x00000004 524105059Scognet#define SEND_START_ 0x00000008 525105059Scognet#define TAG_QUEUING_ 0x00000010 526105059Scognet 527105059Scognet/* 528105059Scognet * EE_MODE2 bits definition 529105059Scognet */ 530105059Scognet#define MORE2_DRV 0x00000001 531105059Scognet#define GREATER_1G 0x00000002 532105059Scognet#define RST_SCSI_BUS 0x00000004 533105059Scognet#define ACTIVE_NEGATION 0x00000008 534105059Scognet#define NO_SEEK 0x00000010 535105059Scognet#define LUN_CHECK 0x00000020 536105059Scognet 537105059Scognet#define ENABLE_CE 0x01 538105059Scognet#define DISABLE_CE 0x00 539105059Scognet#define EEPROM_READ 0x80 540105059Scognet 541105059Scognet/* 542105059Scognet * The PCI configuration register offset for TRM_S1040 543105059Scognet * Registers bit Definition 544105059Scognet */ 545105059Scognet#define TRMREG_ID 0x00 /* Vendor and Device ID */ 546105059Scognet#define TRMREG_COMMAND 0x04 /* PCI command register */ 547105059Scognet#define TRMREG_IOBASE 0x10 /* I/O Space base address */ 548105059Scognet#define TRMREG_ROMBASE 0x30 /* Expansion ROM Base Address */ 549105059Scognet#define TRMREG_INTLINE 0x3C /* Interrupt line */ 550105059Scognet 551105059Scognet/* 552105059Scognet * 553105059Scognet * The SCSI register offset for TRM_S1040 554105059Scognet * 555105059Scognet */ 556105059Scognet#define TRMREG_SCSI_STATUS 0x80 /* SCSI Status (R) */ 557105059Scognet/* ######### */ 558105059Scognet#define COMMANDPHASEDONE 0x2000 /* SCSI command phase done */ 559105059Scognet#define SCSIXFERDONE 0x0800 /* SCSI SCSI transfer done */ 560105059Scognet#define SCSIXFERCNT_2_ZERO 0x0100 /* SCSI SCSI transfer count to zero*/ 561105059Scognet#define SCSIINTERRUPT 0x0080 /* SCSI interrupt pending */ 562105059Scognet#define COMMANDABORT 0x0040 /* SCSI command abort */ 563105059Scognet#define SEQUENCERACTIVE 0x0020 /* SCSI sequencer active */ 564105059Scognet#define PHASEMISMATCH 0x0010 /* SCSI phase mismatch */ 565105059Scognet#define PARITYERROR 0x0008 /* SCSI parity error */ 566105059Scognet 567105059Scognet#define PHASEMASK 0x0007 /* Phase MSG/CD/IO */ 568105059Scognet#define PH_DATA_OUT 0x00 /* Data out phase */ 569105059Scognet#define PH_DATA_IN 0x01 /* Data in phase */ 570105059Scognet#define PH_COMMAND 0x02 /* Command phase */ 571105059Scognet#define PH_STATUS 0x03 /* Status phase */ 572105059Scognet#define PH_BUS_FREE 0x05 /* Invalid phase used as bus free */ 573105059Scognet#define PH_MSG_OUT 0x06 /* Message out phase */ 574105059Scognet#define PH_MSG_IN 0x07 /* Message in phase */ 575105059Scognet 576105059Scognet#define TRMREG_SCSI_CONTROL 0x80 /* SCSI Control (W) */ 577105059Scognet/* ######### */ 578105059Scognet#define DO_CLRATN 0x0400 /* Clear ATN */ 579105059Scognet#define DO_SETATN 0x0200 /* Set ATN */ 580105059Scognet#define DO_CMDABORT 0x0100 /* Abort SCSI command */ 581105059Scognet#define DO_RSTMODULE 0x0010 /* Reset SCSI chip */ 582105059Scognet#define DO_RSTSCSI 0x0008 /* Reset SCSI bus */ 583105059Scognet#define DO_CLRFIFO 0x0004 /* Clear SCSI transfer FIFO */ 584105059Scognet#define DO_DATALATCH 0x0002 /* Enable SCSI bus data latch */ 585105059Scognet#define DO_HWRESELECT 0x0001 /* Enable hardware reselection */ 586105059Scognet#define TRMREG_SCSI_FIFOCNT 0x82 /* SCSI FIFO Counter 5bits(R) */ 587105059Scognet#define TRMREG_SCSI_SIGNAL 0x83 /* SCSI low level signal (R/W) */ 588105059Scognet#define TRMREG_SCSI_INTSTATUS 0x84 /* SCSI Interrupt Status (R) */ 589105059Scognet/* ######### */ 590105059Scognet#define INT_SCAM 0x80 /* SCAM selection interrupt */ 591105059Scognet#define INT_SELECT 0x40 /* Selection interrupt */ 592105059Scognet#define INT_SELTIMEOUT 0x20 /* Selection timeout interrupt */ 593105059Scognet#define INT_DISCONNECT 0x10 /* Bus disconnected interrupt */ 594105059Scognet#define INT_RESELECTED 0x08 /* Reselected interrupt */ 595105059Scognet#define INT_SCSIRESET 0x04 /* SCSI reset detected interrupt*/ 596105059Scognet#define INT_BUSSERVICE 0x02 /* Bus service interrupt */ 597105059Scognet#define INT_CMDDONE 0x01 /* SCSI command done interrupt */ 598105059Scognet#define TRMREG_SCSI_OFFSET 0x84 /* SCSI Offset Count (W) */ 599105059Scognet/* 600105059Scognet * Bit Name Definition 601105059Scognet * 07-05 0 RSVD Reversed. Always 0. 602105059Scognet * 04 0 OFFSET4 Reversed for LVDS. Always 0. 603105059Scognet * 03-00 0 OFFSET[03:00] Offset number from 0 to 15 604105059Scognet */ 605105059Scognet#define TRMREG_SCSI_SYNC 0x85 /* SCSI Synchronous Control (R/W)*/ 606105059Scognet/* ######### */ 607105059Scognet#define LVDS_SYNC 0x20 /* Enable LVDS synchronous */ 608105059Scognet#define WIDE_SYNC 0x10 /* Enable WIDE synchronous */ 609105059Scognet#define ALT_SYNC 0x08 /* Enable Fast-20 alternate synchronous */ 610105059Scognet/* 611105059Scognet * SYNCM 7 6 5 4 3 2 1 0 612105059Scognet * Name RSVD RSVD LVDS WIDE ALTPERD PERIOD2 PERIOD1 PERIOD0 613105059Scognet * Default 0 0 0 0 0 0 0 0 614105059Scognet * 615105059Scognet * 616105059Scognet * Bit Name Definition 617105059Scognet * 07-06 0 RSVD Reversed. Always read 0 618105059Scognet * 05 0 LVDS Reversed. Always read 0 619105059Scognet * 04 0 WIDE/WSCSI Enable wide (16-bits) SCSI transfer. 620105059Scognet * 03 0 ALTPERD/ALTPD Alternate (Sync./Period) mode. 621105059Scognet * 622105059Scognet * @@ When this bit is set, 623105059Scognet * the synchronous period bits 2:0 624105059Scognet * in the Synchronous Mode register 625105059Scognet * are used to transfer data 626105059Scognet * at the Fast-20 rate. 627105059Scognet * @@ When this bit is reset, 628105059Scognet * the synchronous period bits 2:0 629105059Scognet * in the Synchronous Mode Register 630105059Scognet * are used to transfer data 631105059Scognet * at the Fast-40 rate. 632105059Scognet * 633105059Scognet * 02-00 0 PERIOD[2:0]/SXPD[02:00] Synchronous SCSI Transfer Rate. 634105059Scognet * These 3 bits specify 635105059Scognet * the Synchronous SCSI Transfer Rate 636105059Scognet * for Fast-20 and Fast-10. 637105059Scognet * These bits are also reset 638105059Scognet * by a SCSI Bus reset. 639105059Scognet * 640105059Scognet * For Fast-10 bit ALTPD = 0 and LVDS = 0 641105059Scognet * and 0x00000004,0x00000002,0x00000001 is defined as follows : 642105059Scognet * 643105059Scognet * 000 100ns, 10.0 Mbytes/s 644105059Scognet * 001 150ns, 6.6 Mbytes/s 645105059Scognet * 010 200ns, 5.0 Mbytes/s 646105059Scognet * 011 250ns, 4.0 Mbytes/s 647105059Scognet * 100 300ns, 3.3 Mbytes/s 648105059Scognet * 101 350ns, 2.8 Mbytes/s 649105059Scognet * 110 400ns, 2.5 Mbytes/s 650105059Scognet * 111 450ns, 2.2 Mbytes/s 651105059Scognet * 652105059Scognet * For Fast-20 bit ALTPD = 1 and LVDS = 0 653105059Scognet * and 0x00000004,0x00000002,0x00000001 is defined as follows : 654105059Scognet * 655105059Scognet * 000 50ns, 20.0 Mbytes/s 656105059Scognet * 001 75ns, 13.3 Mbytes/s 657105059Scognet * 010 100ns, 10.0 Mbytes/s 658105059Scognet * 011 125ns, 8.0 Mbytes/s 659105059Scognet * 100 150ns, 6.6 Mbytes/s 660105059Scognet * 101 175ns, 5.7 Mbytes/s 661105059Scognet * 110 200ns, 5.0 Mbytes/s 662105059Scognet * 111 250ns, 4.0 Mbytes/s 663105059Scognet * 664105059Scognet * For Fast-40 bit ALTPD = 0 and LVDS = 1 665105059Scognet * and 0x00000004,0x00000002,0x00000001 is defined as follows : 666105059Scognet * 667105059Scognet * 000 25ns, 40.0 Mbytes/s 668105059Scognet * 001 50ns, 20.0 Mbytes/s 669105059Scognet * 010 75ns, 13.3 Mbytes/s 670105059Scognet * 011 100ns, 10.0 Mbytes/s 671105059Scognet * 100 125ns, 8.0 Mbytes/s 672105059Scognet * 101 150ns, 6.6 Mbytes/s 673105059Scognet * 110 175ns, 5.7 Mbytes/s 674105059Scognet * 111 200ns, 5.0 Mbytes/s 675105059Scognet */ 676105059Scognet 677105059Scognet/* 678105059Scognet *************************************** 679105059Scognet */ 680105059Scognet#define TRMREG_SCSI_TARGETID 0x86 /* SCSI Target ID (R/W) */ 681105059Scognet/* 682105059Scognet *************************************** 683105059Scognet */ 684105059Scognet#define TRMREG_SCSI_IDMSG 0x87 /* SCSI Identify Message (R) */ 685105059Scognet/* 686105059Scognet *************************************** 687105059Scognet */ 688105059Scognet#define TRMREG_SCSI_HOSTID 0x87 /* SCSI Host ID (W) */ 689105059Scognet/* 690105059Scognet *************************************** 691105059Scognet */ 692105059Scognet#define TRMREG_SCSI_COUNTER 0x88 /* SCSI Transfer Counter 24bits(R/W)*/ 693105059Scognet/* 694105059Scognet *************************************** 695105059Scognet */ 696105059Scognet#define TRMREG_SCSI_INTEN 0x8C /* SCSI Interrupt Enable (R/W) */ 697105059Scognet/* ######### */ 698105059Scognet#define EN_SCAM 0x80 /* Enable SCAM selection interrupt*/ 699105059Scognet#define EN_SELECT 0x40 /* Enable selection interrupt */ 700105059Scognet#define EN_SELTIMEOUT 0x20 /* Enable selection timeout interrupt*/ 701105059Scognet#define EN_DISCONNECT 0x10 /* Enable bus disconnected interrupt*/ 702105059Scognet#define EN_RESELECTED 0x08 /* Enable reselected interrupt */ 703105059Scognet#define EN_SCSIRESET 0x04 /* Enable SCSI reset detected interrupt*/ 704105059Scognet#define EN_BUSSERVICE 0x02 /* Enable bus service interrupt */ 705105059Scognet#define EN_CMDDONE 0x01 /* Enable SCSI command done interrupt*/ 706105059Scognet/* 707105059Scognet *************************************** 708105059Scognet */ 709105059Scognet#define TRMREG_SCSI_CONFIG0 0x8D /* SCSI Configuration 0 (R/W) */ 710105059Scognet/* ######### */ 711105059Scognet#define PHASELATCH 0x40 /* Enable phase latch */ 712105059Scognet#define INITIATOR 0x20 /* Enable initiator mode */ 713105059Scognet#define PARITYCHECK 0x10 /* Enable parity check */ 714105059Scognet#define BLOCKRST 0x01 /* Disable SCSI reset1 */ 715105059Scognet/* 716105059Scognet *************************************** 717105059Scognet */ 718105059Scognet#define TRMREG_SCSI_CONFIG1 0x8E /* SCSI Configuration 1 (R/W) */ 719105059Scognet/* ######### */ 720105059Scognet#define ACTIVE_NEGPLUS 0x10 /* Enhance active negation */ 721105059Scognet#define FILTER_DISABLE 0x08 /* Disable SCSI data filter */ 722105059Scognet#define ACTIVE_NEG 0x02 /* Enable active negation */ 723111158Scognet#define ACTIVE_HISLEW 0x01 /* Enable high slew rate (3/6 ns) */ 724105059Scognet/* 725105059Scognet *************************************** 726105059Scognet */ 727105059Scognet#define TRMREG_SCSI_CONFIG2 0x8F /* SCSI Configuration 2 (R/W) */ 728105059Scognet/* 729105059Scognet *************************************** 730105059Scognet */ 731105059Scognet#define TRMREG_SCSI_COMMAND 0x90 /* SCSI Command (R/W) */ 732105059Scognet/* ######### */ 733105059Scognet#define SCMD_COMP 0x12 /* Command complete */ 734105059Scognet#define SCMD_SEL_ATN 0x60 /* Selection with ATN */ 735105059Scognet#define SCMD_SEL_ATN3 0x64 /* Selection with ATN3 */ 736105059Scognet#define SCMD_SEL_ATNSTOP 0xB8 /* Selection with ATN and Stop */ 737105059Scognet#define SCMD_FIFO_OUT 0xC0 /* SCSI FIFO transfer out */ 738105059Scognet#define SCMD_DMA_OUT 0xC1 /* SCSI DMA transfer out */ 739105059Scognet#define SCMD_FIFO_IN 0xC2 /* SCSI FIFO transfer in */ 740105059Scognet#define SCMD_DMA_IN 0xC3 /* SCSI DMA transfer in */ 741105059Scognet#define SCMD_MSGACCEPT 0xD8 /* Message accept */ 742105059Scognet/* 743105059Scognet * Code Command Description 744105059Scognet * 745105059Scognet * 02 Enable reselection with FIFO 746105059Scognet * 40 Select without ATN with FIFO 747105059Scognet * 60 Select with ATN with FIFO 748105059Scognet * 64 Select with ATN3 with FIFO 749105059Scognet * A0 Select with ATN and stop with FIFO 750105059Scognet * C0 Transfer information out with FIFO 751105059Scognet * C1 Transfer information out with DMA 752105059Scognet * C2 Transfer information in with FIFO 753105059Scognet * C3 Transfer information in with DMA 754105059Scognet * 12 Initiator command complete with FIFO 755105059Scognet * 50 Initiator transfer information out sequence without ATN with FIFO 756105059Scognet * 70 Initiator transfer information out sequence with ATN with FIFO 757105059Scognet * 74 Initiator transfer information out sequence with ATN3 with FIFO 758105059Scognet * 52 Initiator transfer information in sequence without ATN with FIFO 759105059Scognet * 72 Initiator transfer information in sequence with ATN with FIFO 760105059Scognet * 76 Initiator transfer information in sequence with ATN3 with FIFO 761105059Scognet * 90 Initiator transfer information out command complete with FIFO 762105059Scognet * 92 Initiator transfer information in command complete with FIFO 763105059Scognet * D2 Enable selection 764105059Scognet * 08 Reselection 765105059Scognet * 48 Disconnect command with FIFO 766105059Scognet * 88 Terminate command with FIFO 767105059Scognet * C8 Target command complete with FIFO 768105059Scognet * 18 SCAM Arbitration/ Selection 769105059Scognet * 5A Enable reselection 770105059Scognet * 98 Select without ATN with FIFO 771105059Scognet * B8 Select with ATN with FIFO 772105059Scognet * D8 Message Accepted 773105059Scognet * 58 NOP 774105059Scognet */ 775105059Scognet/* 776105059Scognet *************************************** 777105059Scognet */ 778105059Scognet#define TRMREG_SCSI_TIMEOUT 0x91 /* SCSI Time Out Value (R/W) */ 779105059Scognet/* 780105059Scognet *************************************** 781105059Scognet */ 782105059Scognet#define TRMREG_SCSI_FIFO 0x98 /* SCSI FIFO (R/W) */ 783105059Scognet/* 784105059Scognet *************************************** 785105059Scognet */ 786111158Scognet#define TRMREG_SCSI_TCR00 0x9C /* SCSI Target Control 0 (R/W) */ 787105059Scognet/* ######### */ 788111158Scognet#define TCR0_DO_WIDE_NEGO 0x80 /* Do wide NEGO */ 789111158Scognet#define TCR0_DO_SYNC_NEGO 0x40 /* Do sync NEGO */ 790111158Scognet#define TCR0_DISCONNECT_EN 0x20 /* Disconnection enable */ 791111158Scognet#define TCR0_OFFSET_MASK 0x1F /* Offset number */ 792111158Scognet/* 793111158Scognet *************************************** 794111158Scognet */ 795111158Scognet#define TRMREG_SCSI_TCR01 0x9D /* SCSI Target Control 0 (R/W) */ 796111158Scognet/* ######### */ 797111158Scognet#define TCR0_ENABLE_LVDS 0xF8 /* LVD */ 798111158Scognet#define TCR0_ENABLE_WIDE 0xF9 /* SE */ 799111158Scognet/* 800111158Scognet**************************************** 801111158Scognet*/ 802105059Scognet 803105059Scognet/* 804105059Scognet *************************************** 805105059Scognet */ 806105059Scognet#define TRMREG_SCSI_TCR1 0x9E /* SCSI Target Control 1 (R/W) */ 807105059Scognet/* ######### */ 808105059Scognet#define MAXTAG_MASK 0x7F00 /* Maximum tags (127) */ 809105059Scognet#define NON_TAG_BUSY 0x0080 /* Non tag command active */ 810105059Scognet#define ACTTAG_MASK 0x007F /* Active tags */ 811105059Scognet/* 812105059Scognet * 813105059Scognet * The DMA register offset for TRM_S1040 814105059Scognet * 815105059Scognet */ 816105059Scognet#define TRMREG_DMA_COMMAND 0xA0 /* DMA Command (R/W) */ 817105059Scognet/* ######### */ 818105059Scognet#define XFERDATAIN 0x0103 /* Transfer data in */ 819105059Scognet#define XFERDATAOUT 0x0102 /* Transfer data out */ 820105059Scognet/* 821105059Scognet *************************************** 822105059Scognet */ 823105059Scognet#define TRMREG_DMA_FIFOCNT 0xA1 /* DMA FIFO Counter (R) */ 824105059Scognet/* 825105059Scognet *************************************** 826105059Scognet */ 827105059Scognet#define TRMREG_DMA_CONTROL 0xA1 /* DMA Control (W) */ 828105059Scognet/* ######### */ 829105059Scognet#define STOPDMAXFER 0x08 /* Stop DMA transfer */ 830105059Scognet#define ABORTXFER 0x04 /* Abort DMA transfer */ 831105059Scognet#define CLRXFIFO 0x02 /* Clear DMA transfer FIFO */ 832105059Scognet#define STARTDMAXFER 0x01 /* Start DMA transfer */ 833105059Scognet/* 834105059Scognet *************************************** 835105059Scognet */ 836105059Scognet#define TRMREG_DMA_STATUS 0xA3 /* DMA Interrupt Status (R/W) */ 837105059Scognet/* ######### */ 838105059Scognet#define XFERPENDING 0x80 /* Transfer pending */ 839105059Scognet#define DMAXFERCOMP 0x02 /* Bus Master XFER Complete status */ 840105059Scognet#define SCSICOMP 0x01 /* SCSI complete interrupt */ 841105059Scognet/* 842105059Scognet *************************************** 843105059Scognet */ 844105059Scognet#define TRMREG_DMA_INTEN 0xA4 /* DMA Interrupt Enable (R/W)*/ 845105059Scognet/* ######### */ 846105059Scognet#define EN_SCSIINTR 0x01 /* Enable SCSI complete interrupt */ 847105059Scognet/* 848105059Scognet *************************************** 849105059Scognet */ 850105059Scognet#define TRMREG_DMA_CONFIG 0xA6 /* DMA Configuration (R/W) */ 851105059Scognet/* ######### */ 852105059Scognet#define DMA_ENHANCE 0x8000 /* Enable DMA enhance feature */ 853105059Scognet/* 854105059Scognet *************************************** 855105059Scognet */ 856105059Scognet#define TRMREG_DMA_XCNT 0xA8 /* DMA Transfer Counter (R/W)*/ 857105059Scognet/* 858105059Scognet *************************************** 859105059Scognet */ 860105059Scognet#define TRMREG_DMA_CXCNT 0xAC /* DMA Current Transfer Counter (R) */ 861105059Scognet/* 862105059Scognet *************************************** 863105059Scognet */ 864105059Scognet#define TRMREG_DMA_XLOWADDR 0xB0 /* DMA Transfer Physical Low Address */ 865105059Scognet/* 866105059Scognet *************************************** 867105059Scognet */ 868105059Scognet#define TRMREG_DMA_XHIGHADDR 0xB4 /* DMA Transfer Physical High Address */ 869105059Scognet 870105059Scognet/* 871105059Scognet * 872105059Scognet * The general register offset for TRM_S1040 873105059Scognet * 874105059Scognet */ 875105059Scognet#define TRMREG_GEN_CONTROL 0xD4 /* Global Control */ 876105059Scognet/* ######### */ 877105059Scognet#define EN_EEPROM 0x10 /* Enable EEPROM programming */ 878105059Scognet#define AUTOTERM 0x04 /* Enable Auto SCSI terminator */ 879105059Scognet#define LOW8TERM 0x02 /* Enable Lower 8 bit SCSI terminator */ 880105059Scognet#define UP8TERM 0x01 /* Enable Upper 8 bit SCSI terminator */ 881105059Scognet/* 882105059Scognet *************************************** 883105059Scognet */ 884105059Scognet#define TRMREG_GEN_STATUS 0xD5 /* Global Status */ 885105059Scognet/* ######### */ 886105059Scognet#define GTIMEOUT 0x80 /* Global timer reach 0 */ 887105059Scognet#define CON5068 0x10 /* External 50/68 pin connected */ 888105059Scognet#define CON68 0x08 /* Internal 68 pin connected */ 889105059Scognet#define CON50 0x04 /* Internal 50 pin connected */ 890105059Scognet#define WIDESCSI 0x02 /* Wide SCSI card */ 891105059Scognet/* 892105059Scognet *************************************** 893105059Scognet */ 894105059Scognet#define TRMREG_GEN_NVRAM 0xD6 /* Serial NON-VOLATILE RAM port */ 895105059Scognet/* ######### */ 896105059Scognet#define NVR_BITOUT 0x08 /* Serial data out */ 897105059Scognet#define NVR_BITIN 0x04 /* Serial data in */ 898105059Scognet#define NVR_CLOCK 0x02 /* Serial clock */ 899105059Scognet#define NVR_SELECT 0x01 /* Serial select */ 900105059Scognet/* 901105059Scognet *************************************** 902105059Scognet */ 903105059Scognet#define TRMREG_GEN_EDATA 0xD7 /* Parallel EEPROM data port */ 904105059Scognet/* 905105059Scognet *************************************** 906105059Scognet */ 907105059Scognet#define TRMREG_GEN_EADDRESS 0xD8 /* Parallel EEPROM address */ 908105059Scognet/* 909105059Scognet *************************************** 910105059Scognet */ 911105059Scognet#define TRMREG_GEN_TIMER 0xDB /* Global timer */ 912105059Scognet 913105059Scognet/* 914105059Scognet * The SEEPROM structure for TRM_S1040 915105059Scognet */ 916105059Scognettypedef struct NVRAM_TARGET_STRUCT 917105059Scognet{ 918105059Scognet u_int8_t NvmTarCfg0; /* Target configuration byte 0 */ 919105059Scognet u_int8_t NvmTarPeriod; /* Target period */ 920105059Scognet u_int8_t NvmTarCfg2; /* Target configuration byte 2 */ 921105059Scognet u_int8_t NvmTarCfg3; /* Target configuration byte 3 */ 922105059Scognet} NVRAMTARGETTYPE; 923105059Scognet/* NvmTarCfg0: Target configuration byte 0 :..pDCB->DevMode */ 924105059Scognet#define NTC_DO_WIDE_NEGO 0x20 /* Wide negotiate */ 925105059Scognet#define NTC_DO_TAG_QUEUING 0x10 /* Enable SCSI tag queuing */ 926105059Scognet#define NTC_DO_SEND_START 0x08 /* Send start command SPINUP*/ 927105059Scognet#define NTC_DO_DISCONNECT 0x04 /* Enable SCSI disconnect */ 928105059Scognet#define NTC_DO_SYNC_NEGO 0x02 /* Sync negotiation */ 929105059Scognet#define NTC_DO_PARITY_CHK 0x01 /* (it sould define at NAC ) 930105059Scognet Parity check enable */ 931105059Scognet 932105059Scognet/* 933105059Scognet * 934105059Scognet * 935105059Scognet * 936105059Scognet */ 937105059Scognettypedef struct NVRAM_STRUC { 938105059Scognet u_int8_t NvramSubVendorID[2]; /*0,1 Sub Vendor ID */ 939105059Scognet u_int8_t NvramSubSysID[2]; /*2,3 Sub System ID*/ 940105059Scognet u_int8_t NvramSubClass; /*4 Sub Class */ 941105059Scognet u_int8_t NvramVendorID[2]; /*5,6 Vendor ID */ 942105059Scognet u_int8_t NvramDeviceID[2]; /*7,8 Device ID */ 943105059Scognet u_int8_t NvramReserved; /*9 Reserved */ 944111158Scognet NVRAMTARGETTYPE NvramTarget[TRM_MAX_TARGETS];/* *10,11,12,13 945105059Scognet *14,15,16,17 * .... 946105059Scognet * .... 947105059Scognet *70,71,72,73 948105059Scognet */ 949105059Scognet u_int8_t NvramScsiId; /*74 Host Adapter SCSI ID */ 950105059Scognet u_int8_t NvramChannelCfg; /*75 Channel configuration */ 951105059Scognet u_int8_t NvramDelayTime; /*76 Power on delay time */ 952105059Scognet u_int8_t NvramMaxTag; /*77 Maximum tags */ 953105059Scognet u_int8_t NvramReserved0; /*78 */ 954105059Scognet u_int8_t NvramBootTarget; /*79 */ 955105059Scognet u_int8_t NvramBootLun; /*80 */ 956105059Scognet u_int8_t NvramReserved1; /*81 */ 957105059Scognet u_int16_t Reserved[22]; /*82,..125 */ 958105059Scognet u_int16_t NvramCheckSum; /*126,127*/ 959105059Scognet} NVRAMTYPE,*PNVRAMTYPE; 960105059Scognet/* Nvram Initiater bits definition */ 961105059Scognet#define MORE2_DRV 0x00000001 962105059Scognet#define GREATER_1G 0x00000002 963105059Scognet#define RST_SCSI_BUS 0x00000004 964105059Scognet#define ACTIVE_NEGATION 0x00000008 965105059Scognet#define NO_SEEK 0x00000010 966105059Scognet#define LUN_CHECK 0x00000020 967105059Scognet 968111158Scognet/* Nvram Adapter NvramChannelCfg bits definition */ 969105059Scognet#define NAC_SCANLUN 0x20 /* Include LUN as BIOS device*/ 970105059Scognet#define NAC_POWERON_SCSI_RESET 0x04 /* Power on reset enable */ 971105059Scognet#define NAC_GREATER_1G 0x02 /* > 1G support enable */ 972105059Scognet#define NAC_GT2DRIVES 0x01 /* Support more than 2 drives*/ 973105059Scognet/* 974105059Scognet *#define NAC_DO_PARITY_CHK 0x08 // Parity check enable 975105059Scognet */ 976105059Scognet 977105059Scognet#endif /* trm_H */ 978