Annotation of sys/dev/pci/if_lmcioctl.h, Revision 1.1.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