Annotation of sys/dev/pci/if_lmcioctl.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: if_lmcioctl.h,v 1.6 2005/11/07 00:29:21 brad Exp $ */
! 2: /* $Id: if_lmcioctl.h,v 1.6 2005/11/07 00:29:21 brad Exp $ */
! 3:
! 4: /*
! 5: * Copyright (c) 1997-1999 LAN Media Corporation (LMC)
! 6: * All rights reserved. www.lanmedia.com
! 7: *
! 8: * This code is written by Michael Graff <graff@vix.com> for LMC.
! 9: * The code is derived from permitted modifications to software created
! 10: * by Matt Thomas (matt@3am-software.com).
! 11: *
! 12: * Redistribution and use in source and binary forms, with or without
! 13: * modification, are permitted provided that the following conditions
! 14: * are met:
! 15: * 1. Redistributions of source code must retain the above copyright
! 16: * notice, this list of conditions and the following disclaimer.
! 17: * 2. Redistributions in binary form must reproduce the above
! 18: * copyright notice, this list of conditions and the following disclaimer
! 19: * in the documentation and/or other materials provided with the
! 20: * distribution.
! 21: * 3. All marketing or advertising materials mentioning features or
! 22: * use of this software must display the following acknowledgement:
! 23: * This product includes software developed by LAN Media Corporation
! 24: * and its contributors.
! 25: * 4. Neither the name of LAN Media Corporation nor the names of its
! 26: * contributors may be used to endorse or promote products derived
! 27: * from this software without specific prior written permission.
! 28: *
! 29: * THIS SOFTWARE IS PROVIDED BY LAN MEDIA CORPORATION AND CONTRIBUTORS
! 30: * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! 31: * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
! 32: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
! 33: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
! 34: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
! 35: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
! 36: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
! 37: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
! 38: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
! 39: * THE POSSIBILITY OF SUCH DAMAGE.
! 40: */
! 41:
! 42: /*
! 43: * IOCTLs for the sane world.
! 44: */
! 45: #define LMCIOCGINFO _IOW('i', 240, struct ifreq)
! 46: #define LMCIOCSINFO _IOWR('i', 241, struct ifreq)
! 47:
! 48: typedef struct {
! 49: u_int32_t n;
! 50: u_int32_t m;
! 51: u_int32_t v;
! 52: u_int32_t x;
! 53: u_int32_t r;
! 54: u_int32_t f;
! 55: u_int32_t exact;
! 56: } lmc_av9110_t;
! 57:
! 58: /*
! 59: * Common structure passed to the ioctl code.
! 60: */
! 61: struct lmc___ctl {
! 62: u_int32_t cardtype;
! 63: u_int32_t clock_source; /* HSSI, T1 */
! 64: u_int32_t clock_rate; /* T1 */
! 65: u_int32_t crc_length;
! 66: u_int32_t cable_length; /* DS3 */
! 67: u_int32_t scrambler_onoff; /* DS3 */
! 68: u_int32_t cable_type; /* T1 */
! 69: u_int32_t keepalive_onoff; /* protocol */
! 70: u_int32_t ticks; /* ticks/sec */
! 71: union {
! 72: lmc_av9110_t ssi;
! 73: } cardspec;
! 74: u_int32_t circuit_type; /* T1 or E1 */
! 75: };
! 76:
! 77: #define LMC_CARDTYPE_UNKNOWN -1
! 78: #define LMC_CARDTYPE_HSSI 1 /* probed card is a HSSI card */
! 79: #define LMC_CARDTYPE_DS3 2 /* probed card is a DS3 card */
! 80: #define LMC_CARDTYPE_SSI 3 /* probed card is a SSI card */
! 81: #define LMC_CARDTYPE_T1 4 /* probed card is a T1 card */
! 82:
! 83: #define LMC_CTL_CARDTYPE_LMC5200 0 /* HSSI */
! 84: #define LMC_CTL_CARDTYPE_LMC5245 1 /* DS3 */
! 85: #define LMC_CTL_CARDTYPE_LMC1000 2 /* SSI, V.35 */
! 86: #define LMC_CTL_CARDTYPE_LMC1200 3 /* DS1 */
! 87:
! 88: #define LMC_CTL_OFF 0 /* generic OFF value */
! 89: #define LMC_CTL_ON 1 /* generic ON value */
! 90:
! 91: #define LMC_CTL_CLOCK_SOURCE_EXT 0 /* clock off line */
! 92: #define LMC_CTL_CLOCK_SOURCE_INT 1 /* internal clock */
! 93:
! 94: #define LMC_CTL_CRC_LENGTH_16 16
! 95: #define LMC_CTL_CRC_LENGTH_32 32
! 96: #define LMC_CTL_CRC_BYTESIZE_2 2
! 97: #define LMC_CTL_CRC_BYTESIZE_4 4
! 98:
! 99: #define LMC_CTL_CABLE_LENGTH_LT_100FT 0 /* DS3 cable < 100 feet */
! 100: #define LMC_CTL_CABLE_LENGTH_GT_100FT 1 /* DS3 cable >= 100 feet */
! 101:
! 102: #define LMC_CTL_CIRCUIT_TYPE_E1 0
! 103: #define LMC_CTL_CIRCUIT_TYPE_T1 1
! 104:
! 105: /*
! 106: * These are not in the least IOCTL related, but I want them common.
! 107: */
! 108: /*
! 109: * assignments for the GPIO register on the DEC chip (common)
! 110: */
! 111: #define LMC_GEP_INIT 0x01 /* 0: */
! 112: #define LMC_GEP_RESET 0x02 /* 1: */
! 113: #define LMC_GEP_LOAD 0x10 /* 4: */
! 114: #define LMC_GEP_DP 0x20 /* 5: */
! 115: #define LMC_GEP_SERIAL 0x40 /* 6: serial out */
! 116: #define LMC_GEP_SERIALCLK 0x80 /* 7: serial clock */
! 117:
! 118: /*
! 119: * HSSI GPIO assignments
! 120: */
! 121: #define LMC_GEP_HSSI_ST 0x04 /* 2: receive timing sense (deprecated) */
! 122: #define LMC_GEP_HSSI_CLOCK 0x08 /* 3: clock source */
! 123:
! 124: /*
! 125: * T1 GPIO assignments
! 126: */
! 127: #define LMC_GEP_SSI_GENERATOR 0x04 /* 2: enable prog freq gen serial i/f */
! 128: #define LMC_GEP_SSI_TXCLOCK 0x08 /* 3: provide clock on TXCLOCK output */
! 129:
! 130: /*
! 131: * Common MII16 bits
! 132: */
! 133: #define LMC_MII16_LED0 0x0080
! 134: #define LMC_MII16_LED1 0x0100
! 135: #define LMC_MII16_LED2 0x0200
! 136: #define LMC_MII16_LED3 0x0400 /* Error, and the red one */
! 137: #define LMC_MII16_LED_ALL 0x0780 /* LED bit mask */
! 138: #define LMC_MII16_FIFO_RESET 0x0800
! 139:
! 140: /*
! 141: * definitions for HSSI
! 142: */
! 143: #define LMC_MII16_HSSI_TA 0x0001
! 144: #define LMC_MII16_HSSI_CA 0x0002
! 145: #define LMC_MII16_HSSI_LA 0x0004
! 146: #define LMC_MII16_HSSI_LB 0x0008
! 147: #define LMC_MII16_HSSI_LC 0x0010
! 148: #define LMC_MII16_HSSI_TM 0x0020
! 149: #define LMC_MII16_HSSI_CRC 0x0040
! 150:
! 151: /*
! 152: * assignments for the MII register 16 (DS3)
! 153: */
! 154: #define LMC_MII16_DS3_ZERO 0x0001
! 155: #define LMC_MII16_DS3_TRLBK 0x0002
! 156: #define LMC_MII16_DS3_LNLBK 0x0004
! 157: #define LMC_MII16_DS3_RAIS 0x0008
! 158: #define LMC_MII16_DS3_TAIS 0x0010
! 159: #define LMC_MII16_DS3_BIST 0x0020
! 160: #define LMC_MII16_DS3_DLOS 0x0040
! 161: #define LMC_MII16_DS3_CRC 0x1000
! 162: #define LMC_MII16_DS3_SCRAM 0x2000
! 163:
! 164: /* Note: 2 pairs of LEDs where swapped by mistake
! 165: * in Xilinx code for DS3 & DS1 adapters */
! 166: #define LMC_DS3_LED0 0x0100 /* bit 08 yellow */
! 167: #define LMC_DS3_LED1 0x0080 /* bit 07 blue */
! 168: #define LMC_DS3_LED2 0x0400 /* bit 10 green */
! 169: #define LMC_DS3_LED3 0x0200 /* bit 09 red */
! 170:
! 171: /*
! 172: * framer register 0 and 7 (7 is latched and reset on read)
! 173: */
! 174: #define LMC_FRAMER_REG0_DLOS 0x80 /* digital loss of service */
! 175: #define LMC_FRAMER_REG0_OOFS 0x40 /* out of frame sync */
! 176: #define LMC_FRAMER_REG0_AIS 0x20 /* alarm indication signal */
! 177: #define LMC_FRAMER_REG0_CIS 0x10 /* channel idle */
! 178: #define LMC_FRAMER_REG0_LOC 0x08 /* loss of clock */
! 179:
! 180: /*
! 181: * And SSI, LMC1000
! 182: */
! 183: #define LMC_MII16_SSI_DTR 0x0001 /* DTR output RW */
! 184: #define LMC_MII16_SSI_DSR 0x0002 /* DSR input RO */
! 185: #define LMC_MII16_SSI_RTS 0x0004 /* RTS output RW */
! 186: #define LMC_MII16_SSI_CTS 0x0008 /* CTS input RO */
! 187: #define LMC_MII16_SSI_DCD 0x0010 /* DCD input RO */
! 188: #define LMC_MII16_SSI_RI 0x0020 /* RI input RO */
! 189: #define LMC_MII16_SSI_CRC 0x1000 /* CRC select - RW */
! 190:
! 191: /*
! 192: * bits 0x0080 through 0x0800 are generic, and described
! 193: * above with LMC_MII16_LED[0123] _LED_ALL, and _FIFO_RESET
! 194: */
! 195: #define LMC_MII16_SSI_LL 0x1000 /* LL output RW */
! 196: #define LMC_MII16_SSI_RL 0x2000 /* RL output RW */
! 197: #define LMC_MII16_SSI_TM 0x4000 /* TM input RO */
! 198: #define LMC_MII16_SSI_LOOP 0x8000 /* loopback enable RW */
! 199:
! 200: /*
! 201: * Some of the MII16 bits are mirrored in the MII17 register as well,
! 202: * but let's keep thing separate for now, and get only the cable from
! 203: * the MII17.
! 204: */
! 205: #define LMC_MII17_SSI_CABLE_MASK 0x0038 /* mask to extract the cable type */
! 206: #define LMC_MII17_SSI_CABLE_SHIFT 3 /* shift to extract the cable type */
! 207:
! 208: /*
! 209: * And T1, LMC1200
! 210: */
! 211: #define LMC_MII16_T1_UNUSED1 0x0003
! 212: #define LMC_MII16_T1_XOE 0x0004
! 213: #define LMC_MII16_T1_RST 0x0008 /* T1 chip reset - RW */
! 214: #define LMC_MII16_T1_Z 0x0010 /* output impedance T1=1, E1=0 output - RW */
! 215: #define LMC_MII16_T1_INTR 0x0020 /* interrupt from 8370 - RO */
! 216: #define LMC_MII16_T1_ONESEC 0x0040 /* one second square wave - ro */
! 217:
! 218: #define LMC_MII16_T1_LED0 0x0100
! 219: #define LMC_MII16_T1_LED1 0x0080
! 220: #define LMC_MII16_T1_LED2 0x0400
! 221: #define LMC_MII16_T1_LED3 0x0200
! 222: #define LMC_MII16_T1_FIFO_RESET 0x0800
! 223:
! 224: #define LMC_MII16_T1_CRC 0x1000 /* CRC select - RW */
! 225: #define LMC_MII16_T1_UNUSED2 0xe000
! 226:
! 227: /* 8370 framer registers */
! 228:
! 229: #define T1FRAMER_ALARM1_STATUS 0x47
! 230: #define T1FRAMER_ALARM2_STATUS 0x48
! 231: #define T1FRAMER_FERR_LSB 0x50
! 232: #define T1FRAMER_FERR_MSB 0x51 /* framing bit error counter */
! 233: #define T1FRAMER_LCV_LSB 0x54
! 234: #define T1FRAMER_LCV_MSB 0x55 /* line code violation counter */
! 235: #define T1FRAMER_AERR 0x5A
! 236:
! 237: /* mask for the above AERR register */
! 238: #define T1FRAMER_LOF_MASK (0x0f0) /* receive loss of frame */
! 239: #define T1FRAMER_COFA_MASK (0x0c0) /* change of frame alignment */
! 240: #define T1FRAMER_SEF_MASK (0x03) /* severely errored frame */
! 241:
! 242: /* 8370 framer register ALM1 (0x47) values
! 243: * used to determine link status
! 244: */
! 245:
! 246: #define T1F_SIGFRZ 0x01 /* signaling freeze */
! 247: #define T1F_RLOF 0x02 /* receive loss of frame alignment */
! 248: #define T1F_RLOS 0x04 /* receive loss of signal */
! 249: #define T1F_RALOS 0x08 /* receive analog loss of signal or RCKI loss of clock */
! 250: #define T1F_RAIS 0x10 /* receive alarm indication signal */
! 251: #define T1F_UNUSED 0x20
! 252: #define T1F_RYEL 0x40 /* receive yellow alarm */
! 253: #define T1F_RMYEL 0x80 /* receive multiframe yellow alarm */
! 254:
! 255: /* ------------------ end T1 defs ------------------- */
! 256:
! 257: #define LMC_MII_LedMask 0x0780
! 258: #define LMC_MII_LedBitPos 7
! 259:
! 260: #if defined(_KERNEL)
! 261: /*
! 262: * media independent methods to check on media status, link, light LEDs,
! 263: * etc.
! 264: */
! 265: struct lmc___media {
! 266: void (* init)(lmc_softc_t * const);
! 267: void (* defaults)(lmc_softc_t * const);
! 268: void (* set_status)(lmc_softc_t * const, lmc_ctl_t *);
! 269: void (* set_clock_source)(lmc_softc_t * const, int);
! 270: void (* set_speed)(lmc_softc_t * const, lmc_ctl_t *);
! 271: void (* set_cable_length)(lmc_softc_t * const, int);
! 272: void (* set_scrambler)(lmc_softc_t * const, int);
! 273: int (* get_link_status)(lmc_softc_t * const);
! 274: void (* set_link_status)(lmc_softc_t * const, int);
! 275: void (* set_crc_length)(lmc_softc_t * const, int);
! 276: void (* set_circuit_type)(lmc_softc_t * const, int);
! 277: void (* watchdog)(lmc_softc_t * const);
! 278: };
! 279:
! 280: u_int32_t lmc_mii_readreg(lmc_softc_t * const sc, u_int32_t devaddr,
! 281: u_int32_t regno);
! 282: void lmc_mii_writereg(lmc_softc_t * const sc, u_int32_t devaddr,
! 283: u_int32_t regno, u_int32_t data);
! 284: void lmc_initcsrs(lmc_softc_t * const sc, lmc_csrptr_t csr_base,
! 285: size_t csr_size);
! 286: void lmc_dec_reset(lmc_softc_t * const sc);
! 287: void lmc_reset(lmc_softc_t * const sc);
! 288: void lmc_led_on(lmc_softc_t * const sc, u_int32_t led);
! 289: void lmc_led_off(lmc_softc_t * const sc, u_int32_t led);
! 290: void lmc_gpio_mkinput(lmc_softc_t * const sc, u_int32_t bits);
! 291: void lmc_gpio_mkoutput(lmc_softc_t * const sc, u_int32_t bits);
! 292: lmc_intrfunc_t lmc_intr_normal(void *);
! 293: int lmc_read_macaddr(lmc_softc_t * const sc);
! 294: void lmc_attach(lmc_softc_t * const sc);
! 295: void lmc_initring(lmc_softc_t * const sc, lmc_ringinfo_t * const ri,
! 296: lmc_desc_t *descs, int ndescs);
! 297: #endif /* _KERNEL */
CVSweb