Annotation of sys/dev/pci/musyccreg.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: musyccreg.h,v 1.3 2005/08/27 12:53:17 claudio Exp $ */
2:
3: /*
4: * Copyright (c) 2004,2005 Internet Business Solutions AG, Zurich, Switzerland
5: * Written by: Claudio Jeker <jeker@accoom.net>
6: *
7: * Permission to use, copy, modify, and distribute this software for any
8: * purpose with or without fee is hereby granted, provided that the above
9: * copyright notice and this permission notice appear in all copies.
10: *
11: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18: */
19: #ifndef __MUSYCCREG_H__
20: #define __MUSYCCREG_H__
21:
22: #define MUSYCC_PCI_BAR 0x10 /* offset of Base Address Register */
23:
24: /* Group Base Pointer -- per Group unique */
25: #define MUSYCC_GROUPBASE(x) (0x0800 * (x))
26: /* Dual Address Cycle Base Pointer */
27: #define MUSYCC_DACB_PTR 0x0004
28: /* Service Request Descriptor -- per Group unique */
29: #define MUSYCC_SERREQ(x) (0x0008 + 0x0800 * (x))
30: /* Interrupt Status Descriptor */
31: #define MUSYCC_INTRSTATUS 0x000c
32: #define MUSYCC_INTCNT_MASK 0x00007fff
33: #define MUSYCC_INTFULL 0x00008000
34: #define MUSYCC_NEXTINT_GET(x) (((x) >> 16) & 0x7fff)
35: #define MUSYCC_NEXTINT_SET(x) (((x) & 0x7fff) << 16)
36:
37: /* Global Configuration Descriptor */
38: #define MUSYCC_GLOBALCONF 0x0600
39: /* Interrupt Queue Descriptor */
40: #define MUSYCC_INTQPTR 0x0604
41: #define MUSYCC_INTQLEN 0x0608
42:
43: /* group structure [page 5-6], this puppy needs to be 2k aligned */
44: struct musycc_grpdesc {
45: u_int32_t tx_headp[32]; /* transmit head ptr */
46: u_int32_t tx_msgp[32]; /* transmit msg ptr */
47: u_int32_t rx_headp[32]; /* receive head ptr */
48: u_int32_t rx_msgp[32]; /* receive msg ptr */
49: u_int8_t tx_tsmap[128]; /* transmit timeslot map */
50: u_int8_t tx_submap[256]; /* transmit sub channel map */
51: u_int32_t tx_cconf[32]; /* transmit channel config */
52: u_int8_t rx_tsmap[128]; /* receive timeslot map */
53: u_int8_t rx_submap[256]; /* receive sub channel map */
54: u_int32_t rx_cconf[32]; /* receive channel config */
55: u_int32_t global_conf; /* global config */
56: u_int32_t int_queuep; /* interrupt queue ptr */
57: u_int32_t int_queuelen; /* interrupt queue len */
58: u_int32_t group_conf; /* group config */
59: u_int32_t memprot; /* memory protection */
60: u_int32_t msglen_conf; /* message length config */
61: u_int32_t port_conf; /* serial port config */
62: };
63:
64: /* Global Configuration Descriptor [page 5-10] */
65: #define MUSYCC_CONF_PORTMAP 0x00000003 /* group -> port mapping */
66: #define MUSYCC_CONF_INTB 0x00000004 /* if set INTB is disabled */
67: #define MUSYCC_CONF_INTA 0x00000008 /* if set INTA is disabled */
68: #define MUSYCC_CONF_ELAPSE_GET(x) \
69: (((x) >> 4) & 0x7) /* get elapse value */
70: #define MUSYCC_CONF_ELAPSE_SET(x) \
71: ((x & 0x7) << 4) /* set elapse value */
72: #define MUSYCC_CONF_ALAPSE_GET(x) \
73: (((x) >> 8) & 0x3) /* get alapse value */
74: #define MUSYCC_CONF_ALAPSE_SET(x) \
75: ((x & 0x3) << 8) /* set alapse value */
76: #define MUSYCC_CONF_MPUSEL 0x00000400 /* EBUS mode, 1 = intel style */
77: #define MUSYCC_CONF_ECKEN 0x00000800 /* EBUS clock enable */
78: #define MUSYCC_CONF_BLAPSE_GET(x) \
79: (((x) >> 12) & 0x7) /* get blapse value */
80: #define MUSYCC_CONF_BLAPSE_SET(x) \
81: ((x & 0x7) << 12) /* set blapse value */
82:
83: /* Interrupt Descriptor [page 5-41] */
84: #define MUSYCC_INTD_BLEN 0x00001fff /* size of data on EOB & EOM */
85: #define MUSYCC_INTD_ILOST 0x00008000 /* Interrupt Lost */
86: #define MUSYCC_INTD_DIR 0x80000000 /* transmit specific int */
87: #define MUSYCC_INTD_GRP(x) \
88: ((((x) >> 29) & 0x3) | (((x) >> 12) & 0x4)) /* Group Number [0-7] */
89: #define MUSYCC_INTD_CHAN(x) \
90: (((x) >> 24) & 0x1f) /* Channel Number [0-31] */
91: #define MUSYCC_INTD_EVENT(x) \
92: (((x) >> 20) & 0xf) /* Event that caused the int */
93: #define MUSYCC_INTD_ERROR(x) \
94: (((x) >> 16) & 0xf) /* Error that caused the int */
95:
96: /* possible Interrupt Events */
97: #define MUSYCC_INTEV_NONE 0 /* No Event to report */
98: #define MUSYCC_INTEV_SACK 1 /* Service Request Ack */
99: #define MUSYCC_INTEV_EOB 2 /* End of Buffer */
100: #define MUSYCC_INTEV_EOM 3 /* End of Message */
101: #define MUSYCC_INTEV_EOP 4 /* End of Padfill */
102: #define MUSYCC_INTEV_CHABT 5 /* Change to Abort Code */
103: #define MUSYCC_INTEV_CHIC 6 /* Change to Idle Code */
104: #define MUSYCC_INTEV_FREC 7 /* Frame Recovery */
105: #define MUSYCC_INTEV_SINC 8 /* SS7 SUERM Octet Count inc */
106: #define MUSYCC_INTEV_SDEC 9 /* SS7 SUERM Octet Count dec */
107: #define MUSYCC_INTEV_SFILT 10 /* SS7 Filtered Message */
108:
109: /* possible Interrupt Errors */
110: #define MUSYCC_INTERR_NONE 0 /* No Error to report */
111: #define MUSYCC_INTERR_BUFF 1 /* Buffer Error */
112: #define MUSYCC_INTERR_COFA 2 /* Change of Frame Alignment */
113: #define MUSYCC_INTERR_ONR 3 /* Owner-Bit Error */
114: #define MUSYCC_INTERR_PROT 4 /* Mem Protection Violation */
115: #define MUSYCC_INTERR_OOF 8 /* Out of Frame */
116: #define MUSYCC_INTERR_FCS 9 /* Frame Check Sequence Error */
117: #define MUSYCC_INTERR_ALIGN 10 /* Octet Alignment Error */
118: #define MUSYCC_INTERR_ABT 11 /* Abort Termination */
119: #define MUSYCC_INTERR_LNG 12 /* Long Message */
120: #define MUSYCC_INTERR_SHT 13 /* Short Message */
121: #define MUSYCC_INTERR_SUERR 14 /* SS7 Signal Unit Error */
122: #define MUSYCC_INTERR_PERR 15 /* PCI Bus Parity Error */
123:
124: /* Service Request Descriptor [page 5-14] */
125: #define MUSYCC_SREQ_MASK 0x001f /* Generic SREQ/Channel Mask */
126: #define MUSYCC_SREQ_CHSET(x) \
127: ((x) & MUSYCC_SREQ_MASK) /* shortcut */
128: #define MUSYCC_SREQ_TXDIR 0x0020 /* Transmit Direction */
129: #define MUSYCC_SREQ_SET(x) \
130: (((x) & MUSYCC_SREQ_MASK) << 8) /* Service Request */
131:
132: #define MUSYCC_SREQ_RX 0x1 /* Receive Request */
133: #define MUSYCC_SREQ_TX 0x2 /* Transmit Request */
134: #define MUSYCC_SREQ_BOTH 0x3 /* both directions */
135: #define MUSYCC_SREQ_NOWAIT 0x8
136: #define MUSYCC_SREQ_NONE 0xffffffff
137:
138: /* Group Configuration Descriptor [page 5-16] */
139: #define MUSYCC_GRCFG_RXENBL 0x0001 /* Receiver Enabled */
140: #define MUSYCC_GRCFG_TXENBL 0x0002 /* Transmitter Enabled */
141: #define MUSYCC_GRCFG_SUBDSBL 0x0004 /* Subchanneling Disabled */
142: #define MUSYCC_GRCFG_OOFABT 0x0008 /* OOF Message Processing */
143: #define MUSYCC_GRCFG_MSKOOF 0x0010 /* OOF Interrupt Disabled */
144: #define MUSYCC_GRCFG_MSKCOFA 0x0020 /* COFA Interrupt Disabled */
145: #define MUSYCC_GRCFG_MCENBL 0x0040 /* Msg Config Bits Copy */
146: #define MUSYCC_GRCFG_INHRBSD 0x0100 /* Inihibit RX Buf Stat Desc */
147: #define MUSYCC_GRCFG_INHTBSD 0x0200 /* Inihibit TX Buf Stat Desc */
148: #define MUSYCC_GRCFG_POLL16 0x0400 /* Poll at all 16 frame sync */
149: #define MUSYCC_GRCFG_POLL32 0x0800 /* Poll at all 32 frame sync */
150: #define MUSYCC_GRCFG_POLL64 0x0C00 /* Poll at all 64 frame sync */
151: #define MUSYCC_GRCFG_SFALIGN 0x8000 /* Super Frame Alignment */
152: #define MUSYCC_GRCFG_SUETMASK 0x3f0000 /* SS7 SUERR Threshold */
153:
154: /* Port Configuration Descriptor [page 5-19] */
155: #define MUSYCC_PORT_MODEMASK 0x007 /* Port Mode Mask */
156: #define MUSYCC_PORT_MODE_T1 0 /* T1 - 24 time slots */
157: #define MUSYCC_PORT_MODE_E1 1 /* E1 - 32 time slots */
158: #define MUSYCC_PORT_MODE_2E1 2 /* 2*E1 - 64 time slots */
159: #define MUSYCC_PORT_MODE_4E1 3 /* 4*E1 - 128 time slots */
160: #define MUSYCC_PORT_MODE_N64 4 /* N*64 mode */
161: #define MUSYCC_PORT_TDAT_EDGE 0x010 /* TX Data on rising Edge */
162: #define MUSYCC_PORT_TSYNC_EDGE 0x020 /* TX Frame Sync on rising E */
163: #define MUSYCC_PORT_RDAT_EDGE 0x040 /* RX Data on rising Edge */
164: #define MUSYCC_PORT_RSYNC_EDGE 0x080 /* RX Frame Sync on rising E */
165: #define MUSYCC_PORT_ROOF_EDGE 0x100 /* RX OOF on rising Edge */
166: #define MUSYCC_PORT_TRITX 0x200 /* TX Three-state disabled */
167:
168: /* Message Length Descriptor [page 5-20] */
169: #define MUSYCC_MAXFRM_MAX 4094 /* maximum message length */
170: #define MUSYCC_MAXFRM_MASK 0x0fff
171: #define MUSYCC_MAXFRM2_SHIFT 16
172:
173: /* Time Slot Descriptor [page 5-23] */
174: #define MUSYCC_TSLOT_ENABLED 0x80 /* timeslot enabled */
175: #define MUSYCC_TSLOT_56K 0x20 /* 56kbps timeslots */
176: #define MUSYCC_TSLOT_SUB 0x40 /* subchannel timeslots */
177: #define MUSYCC_TSLOT_MASK 0x1f /* channel number mask */
178: #define MUSYCC_TSLOT_CHAN(x) \
179: ((x) & MUSYCC_TSLOT_MASK) /* masked channel number */
180:
181: /* Channel Configuration Descriptor [page 5-27] */
182: #define MUSYCC_CHAN_MSKBUFF 0x00000002 /* BUFF & ONR Intr disabled */
183: #define MUSYCC_CHAN_MSKEOM 0x00000004 /* EOM Interrupt disabled */
184: #define MUSYCC_CHAN_MSKMSG 0x00000008 /* LNG, FCS, ALIGN, ABT mask */
185: #define MUSYCC_CHAN_MSKIDLE 0x00000010 /* CHABT, CHIC, SHT Intr mask */
186: #define MUSYCC_CHAN_MSKSFILT 0x00000020 /* SS7 SFILT Interrupt mask */
187: #define MUSYCC_CHAN_MSKSDEC 0x00000040 /* SS7 SDEC Interrupt mask */
188: #define MUSYCC_CHAN_MSKSINC 0x00000080 /* SS7 SINC Interrupt mask */
189: #define MUSYCC_CHAN_MSKSUERR 0x00000100 /* SS7 SUERR Interrupt mask */
190: #define MUSYCC_CHAN_FCS 0x00000200 /* FCS checksum disable */
191: #define MUSYCC_CHAN_MAXLEN1 0x00000400 /* Msg Len Max via MAXFRM1 */
192: #define MUSYCC_CHAN_MAXLEN2 0x00000800 /* Msg Len Max via MAXFRM1 */
193: #define MUSYCC_CHAN_EOPI 0x00008000 /* End of Padfill Int enable */
194: #define MUSYCC_CHAN_INV 0x00800000 /* Data Inversion */
195: #define MUSYCC_CHAN_PADJ 0x80000000 /* Pad Count Adjust enabled */
196:
197: #define MUSYCC_CHAN_PROTO_GET(x) \
198: (((x) >> 12) & 0x7) /* get line protocol */
199: #define MUSYCC_CHAN_PROTO_SET(x) \
200: ((x & 0x7) << 12) /* set line protocol */
201: #define MUSYCC_PROTO_TRANSPARENT 0 /* raw stream */
202: #define MUSYCC_PROTO_SS7HDLC 1 /* SS7 HDLC messages */
203: #define MUSYCC_PROTO_HDLC16 2 /* basic HDLC with 16 bit FCS */
204: #define MUSYCC_PROTO_HDLC32 3 /* basic HDLC with 32 bit FCS */
205:
206: #define MUSYCC_CHAN_BUFLEN_GET(x) \
207: (((x) >> 16) & 0x3f) /* get FIFO Buffer Length */
208: #define MUSYCC_CHAN_BUFLEN_SET(x) \
209: (((x) & 0x3F) << 16) /* set FIFO Buffer Length */
210: #define MUSYCC_CHAN_BUFIDX_GET(x) \
211: (((x) >> 24) & 0x3f) /* get FIFO Buffer Index */
212: #define MUSYCC_CHAN_BUFIDX_SET(x) \
213: (((x) & 0x3F) << 24) /* set FIFO Buffer Index */
214:
215:
216: /* Tx / Rx Buffer Descriptor [page 5-33] */
217: #define MUSYCC_STATUS_LEN(x) \
218: ((x) & 0x3fff) /* length of dma buffer */
219: #define MUSYCC_STATUS_REPEAT 0x00008000 /* repeat buffer */
220: #define MUSYCC_STATUS_ERROR 0x000f0000
221: #define MUSYCC_STATUS_EOBI 0x10000000 /* end of buffer interrupt */
222: #define MUSYCC_STATUS_EOM 0x20000000 /* end of message */
223: #define MUSYCC_STATUS_NOPOLL 0x40000000 /* don't poll for new descr */
224: #define MUSYCC_STATUS_OWNER 0x80000000
225:
226:
227: /*
228: * ROM data structures
229: */
230:
231: struct musycc_rom {
232: u_int16_t magic;
233: #define MUSYCC_ROM_MAGIC (htons(0xacc0))
234: u_int8_t rev; /* rev. of the card */
235: u_int8_t vers; /* version of the rom */
236: char product[64];
237: u_int8_t portmap; /* portmap config */
238: u_int8_t portmode; /* port mode e.g. 2*E1 */
239: u_int8_t numframer; /* # of sub-configs */
240: u_int8_t ledmask; /* mask for led register */
241: u_int32_t ledbase; /* base of the led register */
242: u_int32_t rfu[2]; /* RFU */
243: };
244:
245: struct musycc_rom_framer {
246: u_int32_t type;
247: u_int32_t base;
248: u_int32_t size;
249: u_int8_t gnum;
250: u_int8_t port;
251: char slot;
252: u_int8_t flags;
253: u_int32_t rfu[2]; /* RFU */
254: };
255: #endif
CVSweb