Annotation of sys/dev/ic/silireg.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: silireg.h,v 1.20 2007/04/07 13:02:52 pascoe Exp $ */
! 2:
! 3: /*
! 4: * Copyright (c) 2007 David Gwynne <dlg@openbsd.org>
! 5: *
! 6: * Permission to use, copy, modify, and distribute this software for any
! 7: * purpose with or without fee is hereby granted, provided that the above
! 8: * copyright notice and this permission notice appear in all copies.
! 9: *
! 10: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 11: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 12: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 13: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 14: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 15: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
! 16: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 17: */
! 18:
! 19: /* PCI Registers */
! 20: #define SILI_PCI_BAR_GLOBAL 0x10 /* Global Registers address */
! 21: #define SILI_PCI_BAR_PORT 0x18 /* Port Registers address */
! 22: #define SILI_PCI_BAR_INDIRECT 0x20 /* Indirect IO Registers address */
! 23:
! 24: /* Global Registers */
! 25: #define SILI_REG_PORT0_STATUS 0x00 /* Port 0 Slot Status */
! 26: #define SILI_REG_PORT1_STATUS 0x04 /* Port 1 Slot Status */
! 27: #define SILI_REG_PORT2_STATUS 0x08 /* Port 2 Slot Status */
! 28: #define SILI_REG_PORT3_STATUS 0x0c /* Port 3 Slot Status */
! 29: #define SILI_REG_GC 0x40 /* Global Control */
! 30: #define SILI_REG_GC_GR (1<<31) /* Global Reset */
! 31: #define SILI_REG_GC_MSIACK (1<<30) /* MSI Acknowledge */
! 32: #define SILI_REG_GC_I2CINT (1<<29) /* I2C Interrupt Enable */
! 33: #define SILI_REG_GC_PERRDIS (1<<28) /* PCI Error Report Disable */
! 34: #define SILI_REG_GC_REQ64 (1<<20) /* latched PCI REQ64 */
! 35: #define SILI_REG_GC_DEVSEL (1<<19) /* latched PCI DEVSEL */
! 36: #define SILI_REG_GC_STOP (1<<18) /* latched PCI STOP */
! 37: #define SILI_REG_GC_TRDY (1<<17) /* latched PCI TRDY */
! 38: #define SILI_REG_GC_M66EN (1<<16) /* M66EN PCI bus signal */
! 39: #define SILI_REG_GC_PIE_MASK 0x0f
! 40: #define SILI_FMT_GC "\020" "\040GR" "\037MSIACK" "\036I2CINT" \
! 41: "\035PERRDIS" "\025REQ64" "\024DEVSEL" \
! 42: "\023STOP" "\022TRDY" "\021M66EN" \
! 43: "\004P3IE" "\003P2IE" "\002P1IE" "\001P0IE"
! 44: #define SILI_REG_GIS 0x44 /* Global Interrupt Status */
! 45: #define SILI_REG_GIS_I2C (1 << 29)
! 46: #define SILI_REG_GIS_PIS_MASK 0x0f
! 47: #define SILI_REG_PHYCONF 0x48 /* PHY Configuration */
! 48: #define SILI_REG_BISTCTL 0x50 /* BIST Control */
! 49: #define SILI_REG_BISTPATTERN 0x54 /* BIST Pattern */
! 50: #define SILI_REG_BISTSTAT 0x58 /* BIST Status */
! 51: #define SILI_REG_FLASHADDR 0x70 /* Flash Address */
! 52: #define SILI_REG_FLASHDATA 0x74 /* Flash Memory Data / GPIO Control */
! 53: #define SILI_REG_GPIOCTL SILI_REG_FLASHDATA
! 54: #define SILI_REG_IICADDR 0x78 /* I2C Address */
! 55: #define SILI_REG_IIC 0x7c /* I2C Data / Control */
! 56:
! 57: #define SILI_PORT_SIZE 0x2000
! 58: #define SILI_PORT_OFFSET(_p) ((_p) * SILI_PORT_SIZE)
! 59:
! 60: /* Port Registers */
! 61: #define SILI_PREG_LRAM 0x0000 /* Port LRAM */
! 62: #define SILI_PREG_SLOT_WIDTH 0x80
! 63: #define SILI_PREG_SLOT(_s) (SILI_PREG_LRAM + (_s) * SILI_PREG_SLOT_WIDTH)
! 64: #define SILI_PREG_RX_COUNT(_s) (SILI_PREG_SLOT(_s) + 0x04)
! 65: #define SILI_PREG_SIG_HI(_s) (SILI_PREG_SLOT(_s) + 0x0c)
! 66: #define SILI_PREG_SIG_HI_SHIFT 8
! 67: #define SILI_PREG_SIG_LO(_s) (SILI_PREG_SLOT(_s) + 0x14)
! 68: #define SILI_PREG_SIG_LO_MASK 0xff
! 69: /* XXX PMP Bits */
! 70: #define SILI_PREG_PCS 0x1000 /* Port Control Set / Status */
! 71: #define SILI_PREG_PCS_PORTRDY (1<<31) /* Port Ready */
! 72: #define SILI_PREG_PCS_OOBB (1<<25) /* OOB Bypass */
! 73: #define SILI_PREG_PCS_ACTIVE(_x) (((_x)>>16) & 0x1f) /* Active Slot */
! 74: #define SILI_PREG_PCS_LED_ON (1<<15) /* LED On */
! 75: #define SILI_PREG_PCS_AIA (1<<14) /* Auto Interlock Accept */
! 76: #define SILI_PREG_PCS_PMEN (1<<13) /* Port Mult Enable */
! 77: #define SILI_PREG_PCS_IA (1<<12) /* Interlock Accept */
! 78: #define SILI_PREG_PCS_IR (1<<11) /* Interlock Reject */
! 79: #define SILI_PREG_PCS_A32B (1<<10) /* 32-bit Activation */
! 80: #define SILI_PREG_PCS_SD (1<<9) /* Scrambler Disable */
! 81: #define SILI_PREG_PCS_CD (1<<8) /* CONT Disable */
! 82: #define SILI_PREG_PCS_TB (1<<7) /* Transmit BIST */
! 83: #define SILI_PREG_PCS_RESUME (1<<6) /* Resume */
! 84: #define SILI_PREG_PCS_PLEN (1<<5) /* Packet Length */
! 85: #define SILI_PREG_PCS_LEDDISABLE (1<<4) /* LED Disable */
! 86: #define SILI_PREG_PCS_NOINTCLR (1<<3) /* No Intr Clear on Read */
! 87: #define SILI_PREG_PCS_PORTINIT (1<<2) /* Port Initialize */
! 88: #define SILI_PREG_PCS_DEVRESET (1<<1) /* Device Reset */
! 89: #define SILI_PREG_PCS_PORTRESET (1<<0) /* Port Reset */
! 90: #define SILI_PFMT_PCS "\020" "\032OOBB" "\020LED_ON" "\017AIA" \
! 91: "\016PMEN" "\015IA" "\014IR" "\013A32B" \
! 92: "\012SD" "\011CD" "\010TB" "\007RESUME" \
! 93: "\006PLEN" "\005LEDDISABLE" \
! 94: "\004NOINTCLR" "\003PORTINIT" \
! 95: "\002PORTINIT" "\001PORTRESET"
! 96: #define SILI_PREG_PCC 0x1004 /* Port Control Clear */
! 97: #define SILI_PREG_PCC_OOBB (1<<25) /* OOB Bypass */
! 98: #define SILI_PREG_PCC_LED_ON (1<<15) /* LED On */
! 99: #define SILI_PREG_PCC_AIA (1<<14) /* Auto Interlock Accept */
! 100: #define SILI_PREG_PCC_PMEN (1<<13) /* Port Mult Enable */
! 101: #define SILI_PREG_PCC_IA (1<<12) /* Interlock Accept */
! 102: #define SILI_PREG_PCC_IR (1<<11) /* Interlock Reject */
! 103: #define SILI_PREG_PCC_A32B (1<<10) /* 32-bit Activation */
! 104: #define SILI_PREG_PCC_SD (1<<9) /* Scrambler Disable */
! 105: #define SILI_PREG_PCC_CD (1<<8) /* CONT Disable */
! 106: #define SILI_PREG_PCC_TB (1<<7) /* Transmit BIST */
! 107: #define SILI_PREG_PCC_RESUME (1<<6) /* Resume */
! 108: #define SILI_PREG_PCC_PLEN (1<<5) /* Packet Length */
! 109: #define SILI_PREG_PCC_LEDDISABLE (1<<4) /* LED Disable */
! 110: #define SILI_PREG_PCC_NOINTCLR (1<<3) /* No Intr Clear on Read */
! 111: #define SILI_PREG_PCC_PORTINIT (1<<2) /* Port Initialize */
! 112: #define SILI_PREG_PCC_DEVRESET (1<<1) /* Device Reset */
! 113: #define SILI_PREG_PCC_PORTRESET (1<<0) /* Port Reset */
! 114: #define SILI_PREG_IS 0x1008 /* Interrupt Status */
! 115: #define SILI_PREG_IS_SDB (1<<11) /* SDB Notify */
! 116: #define SILI_PREG_IS_HANDSHAKE (1<<10) /* Handshake error threshold */
! 117: #define SILI_PREG_IS_CRC (1<<9) /* CRC error threshold */
! 118: #define SILI_PREG_IS_DEC (1<<8) /* 8b/10b decode error thresh */
! 119: #define SILI_PREG_IS_DEVXCHG (1<<7) /* Device Exchanged */
! 120: #define SILI_PREG_IS_UNRECFIS (1<<6) /* Unrecognized FIS Type */
! 121: #define SILI_PREG_IS_COMWAKE (1<<5) /* ComWake */
! 122: #define SILI_PREG_IS_PHYRDYCHG (1<<4) /* Phy Ready Change */
! 123: #define SILI_PREG_IS_PMCHG (1<<3) /* Power Mmgt Change */
! 124: #define SILI_PREG_IS_PORTRDY (1<<2) /* Port Ready */
! 125: #define SILI_PREG_IS_CMDERR (1<<1) /* Command Error */
! 126: #define SILI_PREG_IS_CMDCOMP (1<<0) /* Command Completion */
! 127: #define SILI_PFMT_IS "\020" "\014SDB" "\013HANDSHAKE" \
! 128: "\012CRC" "\011DECODE" \
! 129: "\010DEVXCHG" "\007UNRECFIS" \
! 130: "\006COMWAKE" "\005PHYRDYCHG" \
! 131: "\004PMCHG" "\003PORTRDY" \
! 132: "\002CMDERR" "\001CMDCOMP"
! 133: #define SILI_PREG_IES 0x1010 /* Interrupt Enable Set */
! 134: #define SILI_PREG_IEC 0x1014 /* Interrupt Enable Clear */
! 135: #define SILI_PREG_IE_SDB (1<<11) /* SDB Notify */
! 136: #define SILI_PREG_IE_DEVXCHG (1<<7) /* Device Exchange */
! 137: #define SILI_PREG_IE_UNRECFIS (1<<6) /* Unrecognized FIS Type */
! 138: #define SILI_PREG_IE_COMWAKE (1<<5) /* ComWake */
! 139: #define SILI_PREG_IE_PHYRDYCHG (1<<4) /* Phy Ready Change */
! 140: #define SILI_PREG_IE_PMCHG (1<<3) /* Power Mmgt Change */
! 141: #define SILI_PREG_IE_PORTRDY (1<<2) /* Port Ready */
! 142: #define SILI_PREG_IE_CMDERR (1<<1) /* Command Error */
! 143: #define SILI_PREG_IE_CMDCOMP (1<<0) /* Command Completion */
! 144: #define SILI_PREG_IE_ALL 0x08ff
! 145: #define SILI_PREG_AUA 0x101c /* Activation Upper Address */
! 146: #define SILI_PREG_FIFO 0x1020 /* Command Execution FIFO */
! 147: #define SILI_PREG_CE 0x1024 /* Command Error */
! 148: #define SILI_PREG_CE_DEVICEERROR 1
! 149: #define SILI_PREG_CE_SDBERROR 2
! 150: #define SILI_PREG_CE_DATAFISERROR 3
! 151: #define SILI_PREG_FC 0x1028 /* FIS Configuration */
! 152: #define SILI_PREG_RFT 0x102c /* Request FIFO Threshold */
! 153: #define SILI_PREG_DEC 0x1040 /* 8b/10b Decode Error Counter */
! 154: #define SILI_PREG_CEC 0x1044 /* CRC Error Counter */
! 155: #define SILI_PREG_HEC 0x1048 /* Handshake Error Counter */
! 156: #define SILI_PREG_PHYCONF 0x1050 /* Port PHY Configuration */
! 157: #define SILI_PREG_PSS 0x1800 /* Port Slot Status */
! 158: #define SILI_PREG_PSS_ATTENTION (1 << 31)
! 159: #define SILI_PREG_PSS_ALL_SLOTS 0x7fffffff
! 160: #define SILI_PREG_CAR_LO(_s) (0x1c00 + ((_s) * 0x8)) /* Cmd Activate Reg */
! 161: #define SILI_PREG_CAR_HI(_s) (0x1c00 + ((_s) * 0x8) + 0x4)
! 162: #define SILI_PREG_CONTEXT 0x1e0f /* Port Context Register */
! 163: #define SILI_PREG_SCTL 0x1f00 /* SControl */
! 164: #define SILI_PREG_SSTS 0x1f04 /* SStatus */
! 165: #define SILI_PREG_SERR 0x1f08 /* SError */
! 166: #define SILI_PREG_SACT 0x1f0c /* SActive */
! 167:
! 168:
! 169: struct sili_sge {
! 170: u_int32_t addr_lo;
! 171: u_int32_t addr_hi;
! 172: u_int32_t data_count;
! 173: u_int32_t flags;
! 174: #define SILI_SGE_TRM (1<<31)
! 175: #define SILI_SGE_LNK (1<<30)
! 176: #define SILI_SGE_DRD (1<<29)
! 177: #define SILI_SGE_XCF (1<<28)
! 178: } __packed;
! 179:
! 180: #define SILI_SGT_SGLLEN 4
! 181:
! 182: struct sili_sgt {
! 183: struct sili_sge sgl[SILI_SGT_SGLLEN];
! 184: } __packed;
! 185:
! 186: #define SILI_PRB_PROTOCOL_OVERRIDE (1<<0)
! 187: #define SILI_PRB_RETRANSMIT (1<<1)
! 188: #define SILI_PRB_EXTERNAL_COMMAND (1<<2)
! 189: #define SILI_PRB_RECEIVE (1<<3)
! 190: #define SILI_PRB_PACKET_READ (1<<4)
! 191: #define SILI_PRB_PACKET_WRITE (1<<5)
! 192: #define SILI_PRB_INTERRUPT_MASK (1<<6)
! 193: #define SILI_PRB_SOFT_RESET (1<<7)
! 194:
! 195: struct sili_prb { /* this is just a useful template */
! 196: u_int16_t control;
! 197: u_int16_t reserved1;
! 198: u_int32_t reserved2;
! 199:
! 200: u_int8_t fis[ATA_FIS_LENGTH];
! 201:
! 202: u_int32_t reserved3[9];
! 203: } __packed;
! 204:
! 205: struct sili_prb_ata {
! 206: u_int16_t control;
! 207: u_int16_t protocol_override;
! 208: u_int32_t rx_count;
! 209:
! 210: u_int8_t fis[ATA_FIS_LENGTH];
! 211:
! 212: u_int32_t reserved;
! 213:
! 214: struct sili_sge sgl[2];
! 215: } __packed;
! 216:
! 217: struct sili_prb_packet {
! 218: u_int16_t control;
! 219: u_int16_t protocol_override;
! 220: u_int32_t rx_count;
! 221:
! 222: u_int8_t fis[ATA_FIS_LENGTH];
! 223:
! 224: u_int32_t reserved;
! 225:
! 226: u_int8_t cdb[16];
! 227:
! 228: struct sili_sge sgl[1];
! 229: } __packed;
! 230:
! 231: struct sili_prb_softreset {
! 232: u_int16_t control;
! 233: u_int16_t reserved1;
! 234: u_int32_t reserved2;
! 235:
! 236: u_int8_t fis[ATA_FIS_LENGTH];
! 237:
! 238: u_int32_t reserved3[9];
! 239: } __packed;
! 240:
! 241: #define SILI_MAX_CMDS 31
! 242: #define SILI_PRB_LENGTH 64
! 243: #define SILI_PRB_ALIGN 8
! 244: #define SILI_SGT_LENGTH 64
CVSweb