1*7c478bd9Sstevel@tonic-gate /* 2*7c478bd9Sstevel@tonic-gate * Copyright (c) 1995,1997-1998 by Sun Microsystems, Inc. 3*7c478bd9Sstevel@tonic-gate * All rights reserved. 4*7c478bd9Sstevel@tonic-gate */ 5*7c478bd9Sstevel@tonic-gate 6*7c478bd9Sstevel@tonic-gate #ifndef _SYS_SOCALREG_H 7*7c478bd9Sstevel@tonic-gate #define _SYS_SOCALREG_H 8*7c478bd9Sstevel@tonic-gate 9*7c478bd9Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 10*7c478bd9Sstevel@tonic-gate 11*7c478bd9Sstevel@tonic-gate #ifdef __cplusplus 12*7c478bd9Sstevel@tonic-gate extern "C" { 13*7c478bd9Sstevel@tonic-gate #endif 14*7c478bd9Sstevel@tonic-gate 15*7c478bd9Sstevel@tonic-gate /* 16*7c478bd9Sstevel@tonic-gate * socalreg.h: 17*7c478bd9Sstevel@tonic-gate * 18*7c478bd9Sstevel@tonic-gate * SOC+ Register Definitions, Interface Adaptor to Fiber Channel 19*7c478bd9Sstevel@tonic-gate */ 20*7c478bd9Sstevel@tonic-gate 21*7c478bd9Sstevel@tonic-gate #define N_SOCAL_NPORTS 2 22*7c478bd9Sstevel@tonic-gate 23*7c478bd9Sstevel@tonic-gate /* 24*7c478bd9Sstevel@tonic-gate * Define the SOC+ configuration register bits. 25*7c478bd9Sstevel@tonic-gate */ 26*7c478bd9Sstevel@tonic-gate typedef union socal_cr_register { 27*7c478bd9Sstevel@tonic-gate struct cr { 28*7c478bd9Sstevel@tonic-gate uint_t aaa:5; 29*7c478bd9Sstevel@tonic-gate uint_t ramsel:3; /* Ram bank select. */ 30*7c478bd9Sstevel@tonic-gate uint_t bbb:6; 31*7c478bd9Sstevel@tonic-gate uint_t eepromsel:2; /* Eeprom bank select. */ 32*7c478bd9Sstevel@tonic-gate uint_t ccc:5; 33*7c478bd9Sstevel@tonic-gate uint_t burst64:3; /* Sbus Burst size, 64 bit mode. */ 34*7c478bd9Sstevel@tonic-gate uint_t ddd:2; 35*7c478bd9Sstevel@tonic-gate uint_t parenable:1; /* Partity test enable. */ 36*7c478bd9Sstevel@tonic-gate uint_t parsbus:1; /* Sbus Parity checking. */ 37*7c478bd9Sstevel@tonic-gate uint_t sbusmode:1; /* Enhanced Sbus mode. */ 38*7c478bd9Sstevel@tonic-gate uint_t sbusburst:3; /* Sbus burst size. */ 39*7c478bd9Sstevel@tonic-gate } reg; 40*7c478bd9Sstevel@tonic-gate uint32_t w; 41*7c478bd9Sstevel@tonic-gate } socal_cr_reg_t; 42*7c478bd9Sstevel@tonic-gate 43*7c478bd9Sstevel@tonic-gate /* 44*7c478bd9Sstevel@tonic-gate * Define Configuration register bits. 45*7c478bd9Sstevel@tonic-gate */ 46*7c478bd9Sstevel@tonic-gate 47*7c478bd9Sstevel@tonic-gate #define SOCAL_CR_SBUS_BURST_SIZE_MASK 0x007 48*7c478bd9Sstevel@tonic-gate #define SOCAL_CR_SBUS_BURST_SIZE_64BIT_MASK 0x700 49*7c478bd9Sstevel@tonic-gate #define SOCAL_CR_SBUS_BURST_SIZE_64BIT(a) \ 50*7c478bd9Sstevel@tonic-gate (((a) & SOCAL_CR_SBUS_BURST_SIZE_64BIT_MASK) >> 8) 51*7c478bd9Sstevel@tonic-gate 52*7c478bd9Sstevel@tonic-gate #define SOCAL_CR_BURST_4 0x0 53*7c478bd9Sstevel@tonic-gate #define SOCAL_CR_BURST_8 0x3 54*7c478bd9Sstevel@tonic-gate #define SOCAL_CR_BURST_16 0x4 55*7c478bd9Sstevel@tonic-gate #define SOCAL_CR_BURST_32 0x5 56*7c478bd9Sstevel@tonic-gate #define SOCAL_CR_BURST_64 0x6 57*7c478bd9Sstevel@tonic-gate #define SOCAL_CR_BURST_128 0x7 58*7c478bd9Sstevel@tonic-gate 59*7c478bd9Sstevel@tonic-gate #define SOCAL_CR_SBUS_ENHANCED 0x08 60*7c478bd9Sstevel@tonic-gate #define SOCAL_CR_SBUS_PARITY_CHK 0x10 61*7c478bd9Sstevel@tonic-gate #define SOCAL_CR_SBUS_PARITY_TEST 0x20 62*7c478bd9Sstevel@tonic-gate 63*7c478bd9Sstevel@tonic-gate #define SOCAL_CR_EEPROM_BANK_MASK 0x30000 64*7c478bd9Sstevel@tonic-gate #define SOCAL_CR_EEPROM_BANK(a) (((a) & SOCAL_CR_EEPROM_BANK_MASK) >> 16) 65*7c478bd9Sstevel@tonic-gate 66*7c478bd9Sstevel@tonic-gate #define SOCAL_CR_EXTERNAL_RAM_BANK_MASK 0x7000000 67*7c478bd9Sstevel@tonic-gate #define SOCAL_CR_EXTERNAL_RAM_BANK(a) \ 68*7c478bd9Sstevel@tonic-gate (((a) & SOCAL_CR_EXTERNAL_RAM_BANK_MASK) >> 24) 69*7c478bd9Sstevel@tonic-gate 70*7c478bd9Sstevel@tonic-gate /* 71*7c478bd9Sstevel@tonic-gate * Define SOC+ Slave Access Register. 72*7c478bd9Sstevel@tonic-gate */ 73*7c478bd9Sstevel@tonic-gate typedef union socal_sae_register { 74*7c478bd9Sstevel@tonic-gate struct sae { 75*7c478bd9Sstevel@tonic-gate uint_t aaa:29; /* Reserved. */ 76*7c478bd9Sstevel@tonic-gate uint_t alignment_err:1; /* Soc Alignment Error. */ 77*7c478bd9Sstevel@tonic-gate uint_t bad_size_err:1; /* Bad Size error. */ 78*7c478bd9Sstevel@tonic-gate uint_t parity_err:1; /* Parity Error. */ 79*7c478bd9Sstevel@tonic-gate } reg; 80*7c478bd9Sstevel@tonic-gate uint32_t w; 81*7c478bd9Sstevel@tonic-gate } socal_sae_reg_t; 82*7c478bd9Sstevel@tonic-gate 83*7c478bd9Sstevel@tonic-gate /* 84*7c478bd9Sstevel@tonic-gate * Define the Slave Access Regsiter Bits. 85*7c478bd9Sstevel@tonic-gate */ 86*7c478bd9Sstevel@tonic-gate 87*7c478bd9Sstevel@tonic-gate #define SOCAL_SAE_PARITY_ERROR 0x01 88*7c478bd9Sstevel@tonic-gate #define SOCAL_SAE_UNSUPPORTED_TRANSFER 0x02 89*7c478bd9Sstevel@tonic-gate #define SOCAL_SAE_ALIGNMENT_ERROR 0x04 90*7c478bd9Sstevel@tonic-gate 91*7c478bd9Sstevel@tonic-gate /* 92*7c478bd9Sstevel@tonic-gate * Define SOC+ Command and Status Register. 93*7c478bd9Sstevel@tonic-gate */ 94*7c478bd9Sstevel@tonic-gate typedef union socal_csr_register { 95*7c478bd9Sstevel@tonic-gate struct csr { 96*7c478bd9Sstevel@tonic-gate uint_t comm_param:8; /* Communication Parameters. */ 97*7c478bd9Sstevel@tonic-gate uint_t aaa:4; 98*7c478bd9Sstevel@tonic-gate uint_t socal_to_host:4; /* Soc to host attention. */ 99*7c478bd9Sstevel@tonic-gate uint_t bbb:4; 100*7c478bd9Sstevel@tonic-gate uint_t host_to_socal:4; /* Host to soc+ attention. */ 101*7c478bd9Sstevel@tonic-gate uint_t sae:1; /* Slave access error indicator. */ 102*7c478bd9Sstevel@tonic-gate uint_t ccc:3; 103*7c478bd9Sstevel@tonic-gate uint_t int_pending:1; /* Interrupt Pending. */ 104*7c478bd9Sstevel@tonic-gate uint_t nqcmd:1; /* Non queued command */ 105*7c478bd9Sstevel@tonic-gate uint_t idle:1; /* SOC+ idle indicator. */ 106*7c478bd9Sstevel@tonic-gate uint_t reset:1; /* Software Reset. */ 107*7c478bd9Sstevel@tonic-gate } reg; 108*7c478bd9Sstevel@tonic-gate uint32_t w; 109*7c478bd9Sstevel@tonic-gate } socal_csr_reg_t; 110*7c478bd9Sstevel@tonic-gate 111*7c478bd9Sstevel@tonic-gate 112*7c478bd9Sstevel@tonic-gate /* 113*7c478bd9Sstevel@tonic-gate * Define SOC+ CSR Register Macros. 114*7c478bd9Sstevel@tonic-gate */ 115*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_ZEROS 0x00000070 116*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_SOCAL_TO_HOST 0x000f0000 117*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_HOST_TO_SOCAL 0x00000f00 118*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_SLV_ACC_ERR 0x00000080 119*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_INT_PENDING 0x00000008 120*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_NON_Q_CMD 0x00000004 121*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_IDLE 0x00000002 122*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_SOFT_RESET 0x00000001 123*7c478bd9Sstevel@tonic-gate 124*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_1ST_S_TO_H 0x00010000 125*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_1ST_H_TO_S 0x00000100 126*7c478bd9Sstevel@tonic-gate 127*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_RSP_QUE_0 SOCAL_CSR_1ST_S_TO_H 128*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_RSP_QUE_1 0x00020000 129*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_RSP_QUE_2 0x00040000 130*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_RSP_QUE_3 0x00080000 131*7c478bd9Sstevel@tonic-gate 132*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_REQ_QUE_0 SOCAL_CSR_1ST_H_TO_S 133*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_REQ_QUE_1 0x00000200 134*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_REQ_QUE_2 0x00000400 135*7c478bd9Sstevel@tonic-gate #define SOCAL_CSR_REQ_QUE_3 0x00000800 136*7c478bd9Sstevel@tonic-gate 137*7c478bd9Sstevel@tonic-gate /* 138*7c478bd9Sstevel@tonic-gate * Define SOC Interrupt Mask Register Bits. 139*7c478bd9Sstevel@tonic-gate */ 140*7c478bd9Sstevel@tonic-gate 141*7c478bd9Sstevel@tonic-gate #define SOCAL_IMR_NON_QUEUED_STATE 0x04 142*7c478bd9Sstevel@tonic-gate #define SOCAL_IMR_SLAVE_ACCESS_ERROR 0x80 143*7c478bd9Sstevel@tonic-gate 144*7c478bd9Sstevel@tonic-gate #define SOCAL_IMR_REQUEST_QUEUE_0 0x100 145*7c478bd9Sstevel@tonic-gate #define SOCAL_IMR_REQUEST_QUEUE_1 0x200 146*7c478bd9Sstevel@tonic-gate #define SOCAL_IMR_REQUEST_QUEUE_2 0x400 147*7c478bd9Sstevel@tonic-gate #define SOCAL_IMR_REQUEST_QUEUE_3 0x800 148*7c478bd9Sstevel@tonic-gate 149*7c478bd9Sstevel@tonic-gate #define SOCAL_IMR_RESPONSE_QUEUE_0 0x10000 150*7c478bd9Sstevel@tonic-gate #define SOCAL_IMR_RESPONSE_QUEUE_1 0x20000 151*7c478bd9Sstevel@tonic-gate #define SOCAL_IMR_RESPONSE_QUEUE_2 0x40000 152*7c478bd9Sstevel@tonic-gate #define SOCAL_IMR_RESPONSE_QUEUE_3 0x80000 153*7c478bd9Sstevel@tonic-gate 154*7c478bd9Sstevel@tonic-gate /* 155*7c478bd9Sstevel@tonic-gate * Define SOC+ Request Queue Index Register 156*7c478bd9Sstevel@tonic-gate */ 157*7c478bd9Sstevel@tonic-gate typedef union socal_reqp_register { 158*7c478bd9Sstevel@tonic-gate struct reqp { 159*7c478bd9Sstevel@tonic-gate uint_t reqq0_index:8; 160*7c478bd9Sstevel@tonic-gate uint_t reqq1_index:8; 161*7c478bd9Sstevel@tonic-gate uint_t reqq2_index:8; 162*7c478bd9Sstevel@tonic-gate uint_t reqq3_index:8; 163*7c478bd9Sstevel@tonic-gate } reg; 164*7c478bd9Sstevel@tonic-gate uint32_t w; 165*7c478bd9Sstevel@tonic-gate } socal_reqp_reg_t; 166*7c478bd9Sstevel@tonic-gate 167*7c478bd9Sstevel@tonic-gate #define SOCAL_REQUESTQ0_MASK 0xff000000 168*7c478bd9Sstevel@tonic-gate #define SOCAL_REQUESTQ1_MASK 0x00ff0000 169*7c478bd9Sstevel@tonic-gate #define SOCAL_REQUESTQ2_MASK 0x0000ff00 170*7c478bd9Sstevel@tonic-gate #define SOCAL_REQUESTQ3_MASK 0x000000ff 171*7c478bd9Sstevel@tonic-gate 172*7c478bd9Sstevel@tonic-gate #define SOCAL_REQUESTQ0_INDEX(a) (((a) & SOCAL_REQUESTQ0_MASK) >> 24) 173*7c478bd9Sstevel@tonic-gate #define SOCAL_REQUESTQ1_INDEX(a) (((a) & SOCAL_REQUESTQ1_MASK) >> 16) 174*7c478bd9Sstevel@tonic-gate #define SOCAL_REQUESTQ2_INDEX(a) (((a) & SOCAL_REQUESTQ2_MASK) >> 8) 175*7c478bd9Sstevel@tonic-gate #define SOCAL_REQUESTQ3_INDEX(a) ((a) & SOCAL_REQUESTQ3_MASK) 176*7c478bd9Sstevel@tonic-gate 177*7c478bd9Sstevel@tonic-gate #define SOCAL_REQUESTQ_INDEX(a, b) ((b)>>((3-(a))<<3) & 0xff) 178*7c478bd9Sstevel@tonic-gate 179*7c478bd9Sstevel@tonic-gate /* 180*7c478bd9Sstevel@tonic-gate * Define SOC+ Response Queue Index Register 181*7c478bd9Sstevel@tonic-gate */ 182*7c478bd9Sstevel@tonic-gate typedef union socal_rspp_register { 183*7c478bd9Sstevel@tonic-gate struct rspp { 184*7c478bd9Sstevel@tonic-gate uint_t rspq0_index:8; 185*7c478bd9Sstevel@tonic-gate uint_t rspq1_index:8; 186*7c478bd9Sstevel@tonic-gate uint_t rspq2_index:8; 187*7c478bd9Sstevel@tonic-gate uint_t rspq3_index:8; 188*7c478bd9Sstevel@tonic-gate } reg; 189*7c478bd9Sstevel@tonic-gate uint32_t w; 190*7c478bd9Sstevel@tonic-gate } socal_rspp_reg_t; 191*7c478bd9Sstevel@tonic-gate 192*7c478bd9Sstevel@tonic-gate #define SOCAL_RESPONSEQ0_MASK 0xff000000 193*7c478bd9Sstevel@tonic-gate #define SOCAL_RESPONSEQ1_MASK 0x00ff0000 194*7c478bd9Sstevel@tonic-gate #define SOCAL_RESPONSEQ2_MASK 0x0000ff00 195*7c478bd9Sstevel@tonic-gate #define SOCAL_RESPONSEQ3_MASK 0x000000ff 196*7c478bd9Sstevel@tonic-gate 197*7c478bd9Sstevel@tonic-gate #define SOCAL_RESPONSEQ0_INDEX(a) (((a) & SOCAL_RESPONSEQ0_MASK) >> 24) 198*7c478bd9Sstevel@tonic-gate #define SOCAL_RESPONSEQ1_INDEX(a) (((a) & SOCAL_RESPONSEQ1_MASK) >> 16) 199*7c478bd9Sstevel@tonic-gate #define SOCAL_RESPONSEQ2_INDEX(a) (((a) & SOCAL_RESPONSEQ2_MASK) >> 8) 200*7c478bd9Sstevel@tonic-gate #define SOCAL_RESPONSEQ3_INDEX(a) ((a) & SOCAL_RESPONSEQ3_MASK) 201*7c478bd9Sstevel@tonic-gate 202*7c478bd9Sstevel@tonic-gate #define SOCAL_RESPONSEQ_INDEX(a, b) ((b)>>((3-(a))<<3) & 0xff) 203*7c478bd9Sstevel@tonic-gate 204*7c478bd9Sstevel@tonic-gate typedef struct _socalreg_ { 205*7c478bd9Sstevel@tonic-gate socal_cr_reg_t socal_cr; /* Configuration reg */ 206*7c478bd9Sstevel@tonic-gate socal_sae_reg_t socal_sae; /* Slave access error reg */ 207*7c478bd9Sstevel@tonic-gate socal_csr_reg_t socal_csr; /* Command Status reg */ 208*7c478bd9Sstevel@tonic-gate uint32_t socal_imr; /* Interrupt Mask reg */ 209*7c478bd9Sstevel@tonic-gate socal_reqp_reg_t socal_reqp; /* request queue index reg */ 210*7c478bd9Sstevel@tonic-gate socal_rspp_reg_t socal_rspp; /* response queue index reg */ 211*7c478bd9Sstevel@tonic-gate } socal_reg_t; 212*7c478bd9Sstevel@tonic-gate 213*7c478bd9Sstevel@tonic-gate /* 214*7c478bd9Sstevel@tonic-gate * Device Address Space Offsets. 215*7c478bd9Sstevel@tonic-gate */ 216*7c478bd9Sstevel@tonic-gate 217*7c478bd9Sstevel@tonic-gate #define SOCAL_XRAM_OFFSET 0x10000 218*7c478bd9Sstevel@tonic-gate #define SOCAL_XRAM_SIZE 0x10000 219*7c478bd9Sstevel@tonic-gate 220*7c478bd9Sstevel@tonic-gate #define SOCAL_MAX_XCHG 1024 221*7c478bd9Sstevel@tonic-gate 222*7c478bd9Sstevel@tonic-gate #define SOCAL_REG_OFFSET (SOCAL_XRAM_OFFSET + SOCAL_XRAM_SIZE) 223*7c478bd9Sstevel@tonic-gate 224*7c478bd9Sstevel@tonic-gate #define SOCAL_CQ_REQUEST_OFFSET (SOCAL_XRAM_OFFSET + 0x200) 225*7c478bd9Sstevel@tonic-gate #define SOCAL_CQ_RESPONSE_OFFSET (SOCAL_XRAM_OFFSET + 0x220) 226*7c478bd9Sstevel@tonic-gate 227*7c478bd9Sstevel@tonic-gate 228*7c478bd9Sstevel@tonic-gate #define SOCAL_INTR_CAUSE(socalp, csr) \ 229*7c478bd9Sstevel@tonic-gate (((csr) & SOCAL_CSR_SOCAL_TO_HOST) | \ 230*7c478bd9Sstevel@tonic-gate ((~csr) & (SOCAL_CSR_HOST_TO_SOCAL))) & socalp->socal_k_imr 231*7c478bd9Sstevel@tonic-gate 232*7c478bd9Sstevel@tonic-gate /* 233*7c478bd9Sstevel@tonic-gate * Bus dma burst sizes 234*7c478bd9Sstevel@tonic-gate */ 235*7c478bd9Sstevel@tonic-gate #ifndef BURSTSIZE 236*7c478bd9Sstevel@tonic-gate #define BURSTSIZE 237*7c478bd9Sstevel@tonic-gate #define BURST1 0x01 238*7c478bd9Sstevel@tonic-gate #define BURST2 0x02 239*7c478bd9Sstevel@tonic-gate #define BURST4 0x04 240*7c478bd9Sstevel@tonic-gate #define BURST8 0x08 241*7c478bd9Sstevel@tonic-gate #define BURST16 0x10 242*7c478bd9Sstevel@tonic-gate #define BURST32 0x20 243*7c478bd9Sstevel@tonic-gate #define BURST64 0x40 244*7c478bd9Sstevel@tonic-gate #define BURST128 0x80 245*7c478bd9Sstevel@tonic-gate #define BURSTSIZE_MASK 0xff 246*7c478bd9Sstevel@tonic-gate #define DEFAULT_BURSTSIZE BURST16|BURST8|BURST4|BURST2|BURST1 247*7c478bd9Sstevel@tonic-gate #endif /* BURSTSIZE */ 248*7c478bd9Sstevel@tonic-gate 249*7c478bd9Sstevel@tonic-gate #ifdef __cplusplus 250*7c478bd9Sstevel@tonic-gate } 251*7c478bd9Sstevel@tonic-gate #endif 252*7c478bd9Sstevel@tonic-gate 253*7c478bd9Sstevel@tonic-gate #endif /* !_SYS_SOCALREG_H */ 254