Annotation of sys/dev/ic/pdqreg.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: pdqreg.h,v 1.9 2002/06/02 22:50:00 deraadt Exp $ */
2: /* $NetBSD: pdqreg.h,v 1.6 1996/08/28 16:01:29 cgd Exp $ */
3:
4: /*-
5: * Copyright (c) 1995, 1996 Matt Thomas <matt@3am-software.com>
6: * All rights reserved.
7: *
8: * Redistribution and use in source and binary forms, with or without
9: * modification, are permitted provided that the following conditions
10: * are met:
11: * 1. Redistributions of source code must retain the above copyright
12: * notice, this list of conditions and the following disclaimer.
13: * 2. The name of the author may not be used to endorse or promote products
14: * derived from this software without specific prior written permission
15: *
16: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26: *
27: * Id: pdqreg.h,v 1.9 1996/05/16 14:25:26 thomas Exp
28: *
29: */
30:
31: /*
32: * DEC PDQ FDDI Controller; PDQ port driver definitions
33: *
34: */
35:
36: #ifndef _PDQREG_H
37: #define _PDQREG_H
38:
39: #if !defined(__NetBSD__) && !defined(__OpenBSD__)
40: #include <stddef.h>
41: #if defined(PDQTEST) && !defined(PDQ_NDEBUG)
42: #include <assert.h>
43: #define PDQ_ASSERT assert
44: #else
45: #define PDQ_ASSERT(x) do { } while(0)
46: #endif
47: #else /* __NetBSD__ || __OpenBSD__*/
48:
49: /*
50: * Can't directly use "assert", because apparently cpp won't expand it
51: * unless it has an argument, which loses.
52: */
53: #ifdef PDQ_NDEBUG
54: #define PDQ_ASSERT(e) ((void)0)
55: #else
56: #ifdef __STDC__
57: #define PDQ_ASSERT(e) ((e) ? (void)0 : \
58: __assert("PDQ ", __FILE__, __LINE__, #e))
59: #else
60: #define PDQ_ASSERT(e) ((e) ? (void)0 : \
61: __assert("PDQ ", __FILE__, __LINE__, "e"))
62: #endif
63: #endif
64: #endif /* __NetBSD__ || __OpenBSD__ */
65:
66: #define PDQ_RING_SIZE(array) ((sizeof(array) / sizeof(array[0])))
67: #define PDQ_ARRAY_SIZE(array) ((sizeof(array) / sizeof(array[0])))
68: #define PDQ_RING_MASK(array) (PDQ_RING_SIZE(array) - 1)
69: #define PDQ_BITMASK(n) (1L << (pdq_uint32_t) (n))
70:
71: #define PDQ_FDDI_MAX 4495
72: #define PDQ_FDDI_LLC_MIN 20
73: #define PDQ_FDDI_SMT_MIN 37
74:
75: #define PDQ_FDDI_SMT 0x40
76: #define PDQ_FDDI_LLC_ASYNC 0x50
77: #define PDQ_FDDI_LLC_SYNC 0xD0
78: #define PDQ_FDDI_IMP_ASYNC 0x60
79: #define PDQ_FDDI_IMP_SYNC 0xE0
80:
81: #define PDQ_FDDIFC_C 0x80
82: #define PDQ_FDDIFC_L 0x40
83: #define PDQ_FDDIFC_F 0x30
84: #define PDQ_FDDIFC_Z 0x0F
85:
86: #define PDQ_FDDI_PH0 0x20
87: #define PDQ_FDDI_PH1 0x38
88: #define PDQ_FDDI_PH2 0x00
89:
90: typedef pdq_uint32_t pdq_physaddr_t;
91:
92: struct _pdq_lanaddr_t {
93: pdq_uint8_t lanaddr_bytes[8];
94: };
95:
96: typedef struct {
97: pdq_uint8_t fwrev_bytes[4];
98: } pdq_fwrev_t;
99:
100: enum _pdq_state_t {
101: PDQS_RESET=0,
102: PDQS_UPGRADE=1,
103: PDQS_DMA_UNAVAILABLE=2,
104: PDQS_DMA_AVAILABLE=3,
105: PDQS_LINK_AVAILABLE=4,
106: PDQS_LINK_UNAVAILABLE=5,
107: PDQS_HALTED=6,
108: PDQS_RING_MEMBER=7
109: };
110:
111: struct _pdq_csrs_t {
112: pdq_bus_memoffset_t csr_port_reset; /* 0x00 [RW] */
113: pdq_bus_memoffset_t csr_host_data; /* 0x04 [R] */
114: pdq_bus_memoffset_t csr_port_control; /* 0x08 [RW] */
115: pdq_bus_memoffset_t csr_port_data_a; /* 0x0C [RW] */
116: pdq_bus_memoffset_t csr_port_data_b; /* 0x10 [RW] */
117: pdq_bus_memoffset_t csr_port_status; /* 0x14 [R] */
118: pdq_bus_memoffset_t csr_host_int_type_0; /* 0x18 [RW] */
119: pdq_bus_memoffset_t csr_host_int_enable; /* 0x1C [RW] */
120: pdq_bus_memoffset_t csr_type_2_producer; /* 0x20 [RW] */
121: pdq_bus_memoffset_t csr_cmd_response_producer; /* 0x28 [RW] */
122: pdq_bus_memoffset_t csr_cmd_request_producer; /* 0x2C [RW] */
123: pdq_bus_memoffset_t csr_host_smt_producer; /* 0x30 [RW] */
124: pdq_bus_memoffset_t csr_unsolicited_producer; /* 0x34 [RW] */
125: pdq_bus_t csr_bus;
126: pdq_bus_memaddr_t csr_base;
127: };
128:
129: struct _pdq_pci_csrs_t {
130: pdq_bus_memoffset_t csr_pfi_mode_control; /* 0x40 [RW] */
131: pdq_bus_memoffset_t csr_pfi_status; /* 0x44 [RW] */
132: pdq_bus_memoffset_t csr_fifo_write; /* 0x48 [RW] */
133: pdq_bus_memoffset_t csr_fifo_read; /* 0x4C [RW] */
134: pdq_bus_t csr_bus;
135: pdq_bus_memaddr_t csr_base;
136: };
137:
138: #define PDQ_PFI_MODE_DMA_ENABLE 0x01 /* DMA Enable */
139: #define PDQ_PFI_MODE_PFI_PCI_INTR 0x02 /* PFI-to-PCI Int Enable */
140: #define PDQ_PFI_MODE_PDQ_PCI_INTR 0x04 /* PDQ-to-PCI Int Enable */
141:
142: #define PDQ_PFI_STATUS_PDQ_INTR 0x10 /* PDQ Int received */
143: #define PDQ_PFI_STATUS_DMA_ABORT 0x08 /* PDQ DMA Abort asserted */
144:
145: #define PDQ_EISA_BURST_HOLDOFF 0x0040
146: #define PDQ_EISA_SLOT_ID 0x0C80
147: #define PDQ_EISA_SLOT_CTRL 0x0C84
148: #define PDQ_EISA_MEM_ADD_CMP_0 0x0C85
149: #define PDQ_EISA_MEM_ADD_CMP_1 0x0C86
150: #define PDQ_EISA_MEM_ADD_CMP_2 0x0C87
151: #define PDQ_EISA_MEM_ADD_HI_CMP_0 0x0C88
152: #define PDQ_EISA_MEM_ADD_HI_CMP_1 0x0C89
153: #define PDQ_EISA_MEM_ADD_HI_CMP_2 0x0C8A
154: #define PDQ_EISA_MEM_ADD_MASK_0 0x0C8B
155: #define PDQ_EISA_MEM_ADD_MASK_1 0x0C8C
156: #define PDQ_EISA_MEM_ADD_MASK_2 0x0C8D
157: #define PDQ_EISA_MEM_ADD_LO_CMP_0 0x0C8E
158: #define PDQ_EISA_MEM_ADD_LO_CMP_1 0x0C8F
159: #define PDQ_EISA_MEM_ADD_LO_CMP_2 0x0C90
160: #define PDQ_EISA_IO_CMP_0_0 0x0C91
161: #define PDQ_EISA_IO_CMP_0_1 0x0C92
162: #define PDQ_EISA_IO_CMP_1_0 0x0C93
163: #define PDQ_EISA_IO_CMP_1_1 0x0C94
164: #define PDQ_EISA_IO_CMP_2_0 0x0C95
165: #define PDQ_EISA_IO_CMP_2_1 0x0C96
166: #define PDQ_EISA_IO_CMP_3_0 0x0C97
167: #define PDQ_EISA_IO_CMP_3_1 0x0C98
168: #define PDQ_EISA_IO_ADD_MASK_0_0 0x0C99
169: #define PDQ_EISA_IO_ADD_MASK_0_1 0x0C9A
170: #define PDQ_EISA_IO_ADD_MASK_1_0 0x0C9B
171: #define PDQ_EISA_IO_ADD_MASK_1_1 0x0C9C
172: #define PDQ_EISA_IO_ADD_MASK_2_0 0x0C9D
173: #define PDQ_EISA_IO_ADD_MASK_2_1 0x0C9E
174: #define PDQ_EISA_IO_ADD_MASK_3_0 0x0C9F
175: #define PDQ_EISA_IO_ADD_MASK_3_1 0x0CA0
176: #define PDQ_EISA_MOD_CONFIG_1 0x0CA1
177: #define PDQ_EISA_MOD_CONFIG_2 0x0CA2
178: #define PDQ_EISA_MOD_CONFIG_3 0x0CA3
179: #define PDQ_EISA_MOD_CONFIG_4 0x0CA4
180: #define PDQ_EISA_MOD_CONFIG_5 0x0CA5
181: #define PDQ_EISA_MOD_CONFIG_6 0x0CA6
182: #define PDQ_EISA_MOD_CONFIG_7 0x0CA7
183: #define PDQ_EISA_DIP_SWITCH 0x0CA8
184: #define PDQ_EISA_IO_CONFIG_STAT_0 0x0CA9
185: #define PDQ_EISA_IO_CONFIG_STAT_1 0x0CAA
186: #define PDQ_EISA_DMA_CONFIG 0x0CAB
187: #define PDQ_EISA_INPUT_PORT 0x0CAC
188: #define PDQ_EISA_OUTPUT_PORT 0x0CAD
189: #define PDQ_EISA_FUNCTION_CTRL 0x0CAE
190:
191: #define PDQ_TC_CSR_OFFSET 0x00100000
192: #define PDQ_TC_CSR_SPACE 0x0040
193: #define PDQ_FBUS_CSR_OFFSET 0x00200000
194: #define PDQ_FBUS_CSR_SPACE 0x0080
195:
196: /*
197: * Port Reset Data A Definitions
198: */
199: #define PDQ_PRESET_SKIP_SELFTEST 0x0004
200: #define PDQ_PRESET_SOFT_RESET 0x0002
201: #define PDQ_PRESET_UPGRADE 0x0001
202: /*
203: * Port Control Register Definitions
204: */
205: #define PDQ_PCTL_CMD_ERROR 0x8000
206: #define PDQ_PCTL_FLASH_BLAST 0x4000
207: #define PDQ_PCTL_HALT 0x2000
208: #define PDQ_PCTL_COPY_DATA 0x1000
209: #define PDQ_PCTL_ERROR_LOG_START 0x0800
210: #define PDQ_PCTL_ERROR_LOG_READ 0x0400
211: #define PDQ_PCTL_XMT_DATA_FLUSH_DONE 0x0200
212: #define PDQ_PCTL_DMA_INIT 0x0100
213: #define PDQ_DMA_INIT_LW_BSWAP_DATA 0x02
214: #define PDQ_DMA_INIT_LW_BSWAP_LITERAL 0x01
215: #define PDQ_PCTL_INIT_START 0x0080
216: #define PDQ_PCTL_CONSUMER_BLOCK 0x0040
217: #define PDQ_PCTL_DMA_UNINIT 0x0020
218: #define PDQ_PCTL_RING_MEMBER 0x0010
219: #define PDQ_PCTL_MLA_READ 0x0008
220: #define PDQ_PCTL_FW_REV_READ 0x0004
221: #define PDQ_PCTL_DEVICE_SPECIFIC 0x0002
222: #define PDQ_PCTL_SUB_CMD 0x0001
223:
224: typedef enum {
225: PDQ_SUB_CMD_LINK_UNINIT=1,
226: PDQ_SUB_CMD_DMA_BURST_SIZE_SET=2,
227: PDQ_SUB_CMD_PDQ_REV_GET=4
228: } pdq_sub_cmd_t;
229:
230: typedef enum {
231: PDQ_DMA_BURST_4LW=0,
232: PDQ_DMA_BURST_8LW=1,
233: PDQ_DMA_BURST_16LW=2,
234: PDQ_DMA_BURST_32LW=3
235: } pdq_dma_burst_size_t;
236:
237: typedef enum {
238: PDQ_CHIP_REV_A_B_OR_C=0,
239: PDQ_CHIP_REV_D=2,
240: PDQ_CHIP_REV_E=4
241: } pdq_chip_rev_t;
242: /*
243: * Port Status Register Definitions
244: */
245: #define PDQ_PSTS_RCV_DATA_PENDING 0x80000000ul
246: #define PDQ_PSTS_XMT_DATA_PENDING 0x40000000ul
247: #define PDQ_PSTS_HOST_SMT_PENDING 0x20000000ul
248: #define PDQ_PSTS_UNSOL_PENDING 0x10000000ul
249: #define PDQ_PSTS_CMD_RSP_PENDING 0x08000000ul
250: #define PDQ_PSTS_CMD_REQ_PENDING 0x04000000ul
251: #define PDQ_PSTS_TYPE_0_PENDING 0x02000000ul
252: #define PDQ_PSTS_INTR_PENDING 0xFE000000ul
253: #define PDQ_PSTS_ADAPTER_STATE(sts) ((pdq_state_t) (((sts) >> 8) & 0x07))
254: #define PDQ_PSTS_HALT_ID(sts) ((pdq_halt_code_t) ((sts) & 0xFF))
255: /*
256: * Host Interrupt Register Definitions
257: */
258: #define PDQ_HOST_INT_TX_ENABLE 0x80000000ul
259: #define PDQ_HOST_INT_RX_ENABLE 0x40000000ul
260: #define PDQ_HOST_INT_UNSOL_ENABLE 0x20000000ul
261: #define PDQ_HOST_INT_HOST_SMT_ENABLE 0x10000000ul
262: #define PDQ_HOST_INT_CMD_RSP_ENABLE 0x08000000ul
263: #define PDQ_HOST_INT_CMD_RQST_ENABLE 0x04000000ul
264:
265: #define PDQ_HOST_INT_1MS 0x80
266: #define PDQ_HOST_INT_20MS 0x40
267: #define PDQ_HOST_INT_CSR_CMD_DONE 0x20
268: #define PDQ_HOST_INT_STATE_CHANGE 0x10
269: #define PDQ_HOST_INT_XMT_DATA_FLUSH 0x08
270: #define PDQ_HOST_INT_NXM 0x04
271: #define PDQ_HOST_INT_PM_PARITY_ERROR 0x02
272: #define PDQ_HOST_INT_HOST_BUS_PARITY_ERROR 0x01
273: #define PDQ_HOST_INT_FATAL_ERROR 0x07
274:
275: typedef enum {
276: PDQH_SELFTEST_TIMEOUT=0,
277: PDQH_HOST_BUS_PARITY_ERROR=1,
278: PDQH_HOST_DIRECTED_HALT=2,
279: PDQH_SOFTWARE_FAULT=3,
280: PDQH_HARDWARE_FAULT=4,
281: PDQH_PC_TRACE_PATH_TEST=5,
282: PDQH_DMA_ERROR=6,
283: PDQH_IMAGE_CRC_ERROR=7,
284: PDQH_ADAPTER_PROCESSOR_ERROR=8,
285: PDQH_MAX=9
286: } pdq_halt_code_t;
287:
288: typedef struct {
289: pdq_uint16_t pdqcb_receives;
290: pdq_uint16_t pdqcb_transmits;
291: pdq_uint32_t pdqcb__filler1;
292: pdq_uint32_t pdqcb_host_smt;
293: pdq_uint32_t pdqcb__filler2;
294: pdq_uint32_t pdqcb_unsolicited_event;
295: pdq_uint32_t pdqcb__filler3;
296: pdq_uint32_t pdqcb_command_response;
297: pdq_uint32_t pdqcb__filler4;
298: pdq_uint32_t pdqcb_command_request;
299: pdq_uint32_t pdqcb__filler5[7];
300: } pdq_consumer_block_t;
301:
302: #if defined(BYTE_ORDER) && BYTE_ORDER == BIG_ENDIAN
303: #define PDQ_BITFIELD2(a, b) b, a
304: #define PDQ_BITFIELD3(a, b, c) c, b, a
305: #define PDQ_BITFIELD4(a, b, c, d) d, c, b, a
306: #define PDQ_BITFIELD5(a, b, c, d, e) e, d, c, b, a
307: #define PDQ_BITFIELD12(a, b, c, d, e, f, g, h, i, j, k, l) \
308: l, k, j, i, h, g, f, e, d, c, b, a
309: #else
310: #define PDQ_BITFIELD2(a, b) a, b
311: #define PDQ_BITFIELD3(a, b, c) a, b, c
312: #define PDQ_BITFIELD4(a, b, c, d) a, b, c, d
313: #define PDQ_BITFIELD5(a, b, c, d, e) a, b, c, d, e
314: #define PDQ_BITFIELD12(a, b, c, d, e, f, g, h, i, j, k, l) \
315: a, b, c, d, e, f, g, h, i, j, k, l
316: #endif
317:
318: typedef struct {
319: pdq_uint32_t PDQ_BITFIELD5(rxd_pa_hi : 16,
320: rxd_seg_cnt : 4,
321: rxd_seg_len_hi : 9,
322: rxd_seg_len_lo : 2,
323: rxd_sop : 1);
324: pdq_uint32_t rxd_pa_lo;
325: } pdq_rxdesc_t;
326:
327: typedef union {
328: pdq_uint32_t rxs_status;
329: pdq_uint32_t PDQ_BITFIELD12(rxs_len : 13,
330: rxs_rcc_ss : 2,
331: rxs_rcc_dd : 2,
332: rxs_rcc_reason : 3,
333: rxs_rcc_badcrc : 1,
334: rxs_rcc_badpdu : 1,
335: rxs_fsb__reserved : 2,
336: rxs_fsb_c : 1,
337: rxs_fsb_a : 1,
338: rxs_fsb_e : 1,
339: rxs_fsc : 3,
340: rxs__reserved : 2);
341: } pdq_rxstatus_t;
342:
343: typedef struct {
344: pdq_uint32_t PDQ_BITFIELD5(txd_pa_hi : 16,
345: txd_seg_len : 13,
346: txd_mbz : 1,
347: txd_eop : 1,
348: txd_sop : 1);
349: pdq_uint32_t txd_pa_lo;
350: } pdq_txdesc_t;
351:
352: typedef struct {
353: pdq_rxdesc_t pdqdb_receives[256]; /* 2048; 0x0000..0x07FF */
354: pdq_txdesc_t pdqdb_transmits[256]; /* 2048; 0x0800..0x0FFF */
355: pdq_rxdesc_t pdqdb_host_smt[64]; /* 512; 0x1000..0x11FF */
356: pdq_rxdesc_t pdqdb_unsolicited_events[16]; /* 128; 0x1200..0x127F */
357: pdq_rxdesc_t pdqdb_command_responses[16]; /* 128; 0x1280..0x12FF */
358: pdq_txdesc_t pdqdb_command_requests[16]; /* 128; 0x1300..0x137F */
359: /*
360: * The rest of the descriptor block is unused.
361: * As such we could use it for other things.
362: */
363: pdq_consumer_block_t pdqdb_consumer; /* 64; 0x1380..0x13BF */
364: void *pdqdb_receive_buffers[256]; /* 1024/2048; 0x13C0..0x17BF 0x13C0..0x1BBF */
365: void *pdqdb_host_smt_buffers[64]; /* 256/ 512; 0x17C0..0x18BF 0x1BC0..0x1DBF */
366: /*
367: * The maximum command size is 512 so as long as thes
368: * command is at least that long all will be fine.
369: */
370: #if defined(__alpha) || defined(__alpha__)
371: pdq_uint32_t pdqdb_command_pool[144];
372: #else
373: pdq_uint32_t pdqdb_command_pool[464];
374: #endif
375: } pdq_descriptor_block_t;
376:
377: typedef struct {
378: /*
379: * These value manage the available space in command/response
380: * buffer area.
381: */
382: pdq_physaddr_t ci_pa_bufstart;
383: pdq_uint8_t *ci_bufstart;
384: /*
385: * Bitmask of commands to sent to the PDQ
386: */
387: pdq_uint32_t ci_pending_commands;
388: /*
389: * Variables to maintain the PDQ queues.
390: */
391: pdq_uint32_t ci_command_active;
392: pdq_uint32_t ci_request_producer;
393: pdq_uint32_t ci_response_producer;
394: pdq_uint32_t ci_request_completion;
395: pdq_uint32_t ci_response_completion;
396: } pdq_command_info_t;
397:
398: #define PDQ_SIZE_UNSOLICITED_EVENT 512
399: #define PDQ_NUM_UNSOLICITED_EVENTS (PDQ_OS_PAGESIZE / PDQ_SIZE_UNSOLICITED_EVENT)
400:
401: typedef struct _pdq_unsolicited_event_t pdq_unsolicited_event_t;
402:
403: typedef struct {
404: pdq_physaddr_t ui_pa_bufstart;
405: pdq_unsolicited_event_t *ui_events;
406:
407: pdq_uint32_t ui_free;
408: pdq_uint32_t ui_producer;
409: pdq_uint32_t ui_completion;
410: } pdq_unsolicited_info_t;
411:
412: #define PDQ_RX_FC_OFFSET (sizeof(pdq_rxstatus_t) + 3)
413: #define PDQ_RX_SEGCNT ((PDQ_FDDI_MAX + PDQ_OS_DATABUF_SIZE - 1) / PDQ_OS_DATABUF_SIZE)
414: #define PDQ_DO_TYPE2_PRODUCER(pdq) \
415: PDQ_CSR_WRITE(&(pdq)->pdq_csrs, csr_type_2_producer, \
416: ((pdq)->pdq_rx_info.rx_producer << 0) \
417: | ((pdq)->pdq_tx_info.tx_producer << 8) \
418: | ((pdq)->pdq_rx_info.rx_completion << 16) \
419: | ((pdq)->pdq_tx_info.tx_completion << 24))
420:
421: #define PDQ_DO_HOST_SMT_PRODUCER(pdq) \
422: PDQ_CSR_WRITE(&(pdq)->pdq_csrs, csr_host_smt_producer, \
423: ((pdq)->pdq_host_smt_info.rx_producer << 0) \
424: | ((pdq)->pdq_host_smt_info.rx_completion << 8))\
425:
426: #define PDQ_ADVANCE(n, a, m) ((n) = ((n) + (a)) & (m))
427:
428: typedef struct {
429: void *q_head;
430: void *q_tail;
431: } pdq_databuf_queue_t;
432:
433: typedef struct {
434: void *rx_buffers;
435:
436: pdq_uint32_t rx_target;
437: pdq_uint32_t rx_free;
438: pdq_uint32_t rx_producer;
439: pdq_uint32_t rx_completion;
440: } pdq_rx_info_t;
441:
442: typedef struct {
443: pdq_databuf_queue_t tx_txq;
444: pdq_txdesc_t tx_hdrdesc;
445: pdq_uint8_t tx_descriptor_count[256];
446:
447: pdq_uint32_t tx_free;
448: pdq_uint32_t tx_producer;
449: pdq_uint32_t tx_completion;
450: } pdq_tx_info_t;
451:
452: struct _pdq_t {
453: pdq_csrs_t pdq_csrs;
454: pdq_pci_csrs_t pdq_pci_csrs;
455: pdq_type_t pdq_type;
456: pdq_chip_rev_t pdq_chip_rev;
457: pdq_lanaddr_t pdq_hwaddr;
458: pdq_fwrev_t pdq_fwrev;
459: pdq_descriptor_block_t *pdq_dbp;
460: volatile pdq_consumer_block_t *pdq_cbp;
461: pdq_uint32_t pdq_flags;
462: #define PDQ_PROMISC 0x0001
463: #define PDQ_ALLMULTI 0x0002
464: #define PDQ_PASS_SMT 0x0004
465: #define PDQ_RUNNING 0x0008
466: #define PDQ_PRINTCHARS 0x0010
467: #define PDQ_TXOK 0x0020
468: const char *pdq_os_name;
469: void *pdq_os_ctx;
470: pdq_uint32_t pdq_unit;
471: pdq_command_info_t pdq_command_info;
472: pdq_unsolicited_info_t pdq_unsolicited_info;
473: pdq_tx_info_t pdq_tx_info;
474: pdq_rx_info_t pdq_rx_info;
475: pdq_rx_info_t pdq_host_smt_info;
476: pdq_uint8_t pdq_tx_hdr[3];
477: };
478:
479: typedef enum {
480: PDQC_START=0,
481: PDQC_FILTER_SET=1,
482: PDQC_FILTER_GET=2,
483: PDQC_CHARS_SET=3,
484: PDQC_STATUS_CHARS_GET=4,
485: PDQC_COUNTERS_GET=5,
486: PDQC_COUNTERS_SET=6,
487: PDQC_ADDR_FILTER_SET=7,
488: PDQC_ADDR_FILTER_GET=8,
489: PDQC_ERROR_LOG_CLEAR=9,
490: PDQC_ERROR_LOG_GET=10,
491: PDQC_FDDI_MIB_GET=11,
492: PDQC_DEC_EXT_MIB_GET=12,
493: PDQC_DEV_SPECIFIC_GET=13,
494: PDQC_SNMP_SET=14,
495: PDQC_SMT_MIB_GET=16,
496: PDQC_SMT_MIB_SET=17
497: } pdq_cmd_code_t;
498:
499: typedef enum {
500: PDQR_SUCCESS=0,
501: PDQR_FAILURE=1,
502: PDQR_WARNING=2,
503: PDQR_LOOP_MODE_BAD=3,
504: PDQR_ITEM_CODE_BAD=4,
505: PDQR_TVX_BAD=5,
506: PDQR_TREQ_BAD=6,
507: PDQR_RESTRICTED_TOKEN_BAD=7,
508: PDQR_NO_EOL=12,
509: PDQR_FILTER_STATE_BAD=13,
510: PDQR_CMD_TYPE_BAD=14,
511: PDQR_ADAPTER_STATE_BAD=15,
512: PDQR_RING_PURGER_BAD=16,
513: PDQR_LEM_THRESHOLD_BAD=17,
514: PDQR_LOOP_NOT_SUPPORTED=18,
515: PDQR_FLUSH_TIME_BAD=19,
516: PDQR_NOT_YET_IMPLEMENTED=20,
517: PDQR_CONFIG_POLICY_BAD=21,
518: PDQR_STATION_ACTION_BAD=22,
519: PDQR_MAC_ACTION_BAD=23,
520: PDQR_CON_POLICIES_BAD=24,
521: PDQR_MAC_LOOP_TIME_BAD=25,
522: PDQR_TB_MAX_BAD=26,
523: PDQR_LER_CUTOFF_BAD=27,
524: PDQR_LER_ALARM_BAD=28,
525: PDQR_MAC_PATHS_REQ_BAD=29,
526: PDQR_MAC_T_REQ_BAD=30,
527: PDQR_EMAC_RING_PURGER_BAD=31,
528: PDQR_EMAC_RTOKEN_TIMOUT_AD=32,
529: PDQR_NO_SUCH_ENTRY=33,
530: PDQR_T_NOTIFY_BAD=34,
531: PDQR_TR_MAX_EXP_BAD=35,
532: PDQR_FRAME_ERR_THRESHOLD_BAD=36,
533: PDQR_MAX_TREQ_BAD=37,
534: PDQR_FULL_DUPLEX_ENABLE_BAD=38,
535: PDQR_ITEM_INDEX_BAD=39
536: } pdq_response_code_t;
537:
538: typedef enum {
539: PDQI_EOL=0,
540: PDQI_T_REQ=1,
541: PDQI_TVX=2,
542: PDQI_RESTRICTED_TOKEN=3,
543: PDQI_LEM_THRESHOLD=4,
544: PDQI_RING_PURGER=5,
545: PDQI_COUNTER_INTERVAL=6,
546: PDQI_IND_GROUP_PROM=7,
547: PDQI_GROUP_PROM=8,
548: PDQI_BROADCAST=9,
549: PDQI_SMT_PROM=10,
550: PDQI_SMT_USER=11,
551: PDQI_RESERVED=12,
552: PDQI_IMPLEMENTOR=13,
553: PDQI_LOOPBACK_MODE=14,
554: PDQI_SMT_CONFIG_POLICY=16,
555: PDQI_SMT_CONNECTION_POLICY=17,
556: PDQI_SMT_T_NOTIFY=18,
557: PDQI_SMT_STATION_ACTION=19,
558: PDQI_MAC_PATHS_REQUESTED=21,
559: PDQI_MAC_ACTION=23,
560: PDQI_PORT_CONNECTION_POLICIES=24,
561: PDQI_PORT_PATHS_REQUESTED=25,
562: PDQI_PORT_MAC_LOOP_TIME=26,
563: PDQI_PORT_TB_MAX=27,
564: PDQI_PORT_LER_CUTOFF=28,
565: PDQI_PORT_LER_ALARM=29,
566: PDQI_PORT_ACTION=30,
567: PDQI_FLUSH_TIME=32,
568: PDQI_SMT_USER_DATA=33,
569: PDQI_SMT_STATUS_REPORT_POLICY=34,
570: PDQI_SMT_TRACE_MAX_EXPIRATION=35,
571: PDQI_MAC_FRAME_ERR_THRESHOLD=36,
572: PDQI_MAC_UNIT_DATA_ENABLE=37,
573: PDQI_PATH_TVX_LOWER_BOUND=38,
574: PDQI_PATH_TMAX_LOWER_BOUND=39,
575: PDQI_PATH_MAX_TREQ=40,
576: PDQI_MAC_TREQ=41,
577: PDQI_EMAC_RING_PURGER=42,
578: PDQI_EMAC_RTOKEN_TIMEOUT=43,
579: PDQI_FULL_DUPLEX_ENABLE=44
580: } pdq_item_code_t;
581:
582: enum _pdq_boolean_t {
583: PDQ_FALSE=0,
584: PDQ_TRUE=1
585: };
586:
587: typedef enum {
588: PDQ_FILTER_BLOCK=0,
589: PDQ_FILTER_PASS=1
590: } pdq_filter_state_t;
591:
592: typedef enum {
593: PDQ_STATION_TYPE_SAS=0,
594: PDQ_STATION_TYPE_DAC=1,
595: PDQ_STATION_TYPE_SAC=2,
596: PDQ_STATION_TYPE_NAC=3,
597: PDQ_STATION_TYPE_DAS=4
598: } pdq_station_type_t;
599:
600: typedef enum {
601: PDQ_STATION_STATE_OFF=0,
602: PDQ_STATION_STATE_ON=1,
603: PDQ_STATION_STATE_LOOPBACK=2
604: } pdq_station_state_t;
605:
606: typedef enum {
607: PDQ_LINK_STATE_OFF_READY=1,
608: PDQ_LINK_STATE_OFF_FAULT_RECOVERY=2,
609: PDQ_LINK_STATE_ON_RING_INIT=3,
610: PDQ_LINK_STATE_ON_RING_RUN=4,
611: PDQ_LINK_STATE_BROKEN=5
612: } pdq_link_state_t;
613:
614: typedef enum {
615: PDQ_DA_TEST_STATE_UNKNOWN=0,
616: PDQ_DA_TEST_STATE_SUCCESS=1,
617: PDQ_DA_TEST_STATE_DUPLICATE=2
618: } pdq_da_test_state_t;
619:
620: typedef enum {
621: PDQ_RING_PURGER_STATE_OFF=0,
622: PDQ_RING_PURGER_STATE_CANDIDATE=1,
623: PDQ_RING_PURGER_STATE_NON_PURGER=2,
624: PDQ_RING_PURGER_STATE_PURGER=3
625: } pdq_ring_purger_state_t;
626:
627: typedef enum {
628: PDQ_FRAME_STRING_MODE_SA_MATCH=0,
629: PDQ_FRAME_STRING_MODE_FCI_STRIP=1
630: } pdq_frame_strip_mode_t;
631:
632: typedef enum {
633: PDQ_RING_ERROR_REASON_NO_ERROR=0,
634: PDQ_RING_ERROR_REASON_RING_INIT_INITIATED=5,
635: PDQ_RING_ERROR_REASON_RING_INIT_RECEIVED=6,
636: PDQ_RING_ERROR_REASON_RING_BEACONING_INITIATED=7,
637: PDQ_RING_ERROR_REASON_DUPLICATE_ADDRESS_DETECTED=8,
638: PDQ_RING_ERROR_REASON_DUPLICATE_TOKEN_DETECTED=9,
639: PDQ_RING_ERROR_REASON_RING_PURGER_ERROR=10,
640: PDQ_RING_ERROR_REASON_FCI_STRIP_ERROR=11,
641: PDQ_RING_ERROR_REASON_RING_OP_OSCILLATION=12,
642: PDQ_RING_ERROR_REASON_DIRECTED_BEACON_RECEVIED=13,
643: PDQ_RING_ERROR_REASON_PC_TRACE_INITIATED=14,
644: PDQ_RING_ERROR_REASON_PC_TRACE_RECEVIED=15
645: } pdq_ring_error_reason_t;
646:
647: typedef enum {
648: PDQ_STATION_MODE_NORMAL=0,
649: PDQ_STATION_MODE_INTERNAL_LOOPBACK=1
650: } pdq_station_mode_t;
651:
652: typedef enum {
653: PDQ_PHY_TYPE_A=0,
654: PDQ_PHY_TYPE_B=1,
655: PDQ_PHY_TYPE_S=2,
656: PDQ_PHY_TYPE_M=3,
657: PDQ_PHY_TYPE_UNKNOWN=4
658: } pdq_phy_type_t;
659:
660: typedef enum {
661: PDQ_PMD_TYPE_ANSI_MUTLI_MODE=0,
662: PDQ_PMD_TYPE_ANSI_SINGLE_MODE_TYPE_1=1,
663: PDQ_PMD_TYPE_ANSI_SIGNLE_MODE_TYPE_2=2,
664: PDQ_PMD_TYPE_ANSI_SONET=3,
665: PDQ_PMD_TYPE_LOW_POWER=100,
666: PDQ_PMD_TYPE_THINWIRE=101,
667: PDQ_PMD_TYPE_SHIELDED_TWISTED_PAIR=102,
668: PDQ_PMD_TYPE_UNSHIELDED_TWISTED_PAIR=103
669: } pdq_pmd_type_t;
670:
671: typedef enum {
672: PDQ_PMD_CLASS_ANSI_MULTI_MODE=0,
673: PDQ_PMD_CLASS_SINGLE_MODE_TYPE_1=1,
674: PDQ_PMD_CLASS_SINGLE_MODE_TYPE_2=2,
675: PDQ_PMD_CLASS_SONET=3,
676: PDQ_PMD_CLASS_LOW_COST_POWER_FIBER=4,
677: PDQ_PMD_CLASS_TWISTED_PAIR=5,
678: PDQ_PMD_CLASS_UNKNOWN=6,
679: PDQ_PMD_CLASS_UNSPECIFIED=7
680: } pdq_pmd_class_t;
681:
682: typedef enum {
683: PDQ_PHY_STATE_INTERNAL_LOOPBACK=0,
684: PDQ_PHY_STATE_BROKEN=1,
685: PDQ_PHY_STATE_OFF_READY=2,
686: PDQ_PHY_STATE_WAITING=3,
687: PDQ_PHY_STATE_STARTING=4,
688: PDQ_PHY_STATE_FAILED=5,
689: PDQ_PHY_STATE_WATCH=6,
690: PDQ_PHY_STATE_INUSE=7
691: } pdq_phy_state_t;
692:
693: typedef enum {
694: PDQ_REJECT_REASON_NONE=0,
695: PDQ_REJECT_REASON_LOCAL_LCT=1,
696: PDQ_REJECT_REASON_REMOTE_LCT=2,
697: PDQ_REJECT_REASON_LCT_BOTH_SIDES=3,
698: PDQ_REJECT_REASON_LEM_REJECT=4,
699: PDQ_REJECT_REASON_TOPOLOGY_ERROR=5,
700: PDQ_REJECT_REASON_NOISE_REJECT=6,
701: PDQ_REJECT_REASON_REMOTE_REJECT=7,
702: PDQ_REJECT_REASON_TRACE_IN_PROGRESS=8,
703: PDQ_REJECT_REASON_TRACE_RECEIVED_DISABLED=9,
704: PDQ_REJECT_REASON_STANDBY=10,
705: PDQ_REJECT_REASON_LCT_PROTOCOL_ERROR=11
706: } pdq_reject_reason_t;
707:
708: typedef enum {
709: PDQ_BROKEN_REASON_NONE=0
710: } pdq_broken_reason_t;
711:
712: typedef enum {
713: PDQ_RI_REASON_TVX_EXPIRED=0,
714: PDQ_RI_REASON_TRT_EXPIRED=1,
715: PDQ_RI_REASON_RING_PURGER_ELECTION_ATTEMPT_LIMIT_EXCEEDED=2,
716: PDQ_RI_REASON_PURGE_ERROR_LIMIT_EXCEEDED=3,
717: PDQ_RI_REASON_RESTRICTED_TOKEN_TIMEOUT=4
718: } pdq_ri_reason_t;
719:
720: typedef enum {
721: PDQ_LCT_DIRECTION_LOCAL_LCT=0,
722: PDQ_LCT_DIRECTION_REMOTE_LCT=1,
723: PDQ_LCT_DIRECTION_LCT_BOTH_SIDES=2
724: } pdq_lct_direction_t;
725:
726: typedef enum {
727: PDQ_PORT_A=0,
728: PDQ_PORT_B=1
729: } pdq_port_type_t;
730:
731: typedef struct {
732: pdq_uint8_t station_id_bytes[8];
733: } pdq_station_id_t;
734:
735: typedef pdq_uint32_t pdq_fdditimer_t;
736: /*
737: * Command format for Start, Filter_Get, ... commands
738: */
739: typedef struct {
740: pdq_cmd_code_t generic_op;
741: } pdq_cmd_generic_t;
742:
743: /*
744: * Response format for Start, Filter_Set, ... commands
745: */
746: typedef struct {
747: pdq_uint32_t generic_reserved;
748: pdq_cmd_code_t generic_op;
749: pdq_response_code_t generic_status;
750: } pdq_response_generic_t;
751:
752: /*
753: * Command format for Filter_Set command
754: */
755: typedef struct {
756: pdq_cmd_code_t filter_set_op;
757: struct {
758: pdq_item_code_t item_code;
759: pdq_filter_state_t filter_state;
760: } filter_set_items[7];
761: pdq_item_code_t filter_set_eol_item_code;
762: } pdq_cmd_filter_set_t;
763:
764: /*
765: * Response format for Filter_Get command.
766: */
767: typedef struct {
768: pdq_uint32_t filter_get_reserved;
769: pdq_cmd_code_t filter_get_op;
770: pdq_response_code_t filter_get_status;
771: pdq_filter_state_t filter_get_ind_group_prom;
772: pdq_filter_state_t filter_get_group_prom;
773: pdq_filter_state_t filter_get_broadcast_all;
774: pdq_filter_state_t filter_get_smt_prom;
775: pdq_filter_state_t filter_get_smt_user;
776: pdq_filter_state_t filter_get_reserved_all;
777: pdq_filter_state_t filter_get_implementor_all;
778: } pdq_response_filter_get_t;
779:
780: #define PDQ_SIZE_RESPONSE_FILTER_GET 0x28
781:
782: typedef struct {
783: pdq_cmd_code_t chars_set_op;
784: struct {
785: pdq_item_code_t item_code;
786: pdq_uint32_t item_value;
787: pdq_port_type_t item_port;
788: } chars_set_items[1];
789: pdq_item_code_t chars_set_eol_item_code;
790: } pdq_cmd_chars_set_t;
791:
792: typedef struct {
793: pdq_cmd_code_t addr_filter_set_op;
794: pdq_lanaddr_t addr_filter_set_addresses[62];
795: } pdq_cmd_addr_filter_set_t;
796:
797: #define PDQ_SIZE_CMD_ADDR_FILTER_SET 0x1F4
798:
799: typedef struct {
800: pdq_uint32_t addr_filter_get_reserved;
801: pdq_cmd_code_t addr_filter_get_op;
802: pdq_response_code_t addr_filter_get_status;
803: pdq_lanaddr_t addr_filter_get_addresses[62];
804: } pdq_response_addr_filter_get_t;
805:
806: #define PDQ_SIZE_RESPONSE_ADDR_FILTER_GET 0x1FC
807:
808: typedef struct {
809: pdq_uint32_t status_chars_get_reserved;
810: pdq_cmd_code_t status_chars_get_op;
811: pdq_response_code_t status_chars_get_status;
812: struct {
813: /* Station Characteristic Attributes */
814: pdq_station_id_t station_id;
815: pdq_station_type_t station_type;
816: pdq_uint32_t smt_version_id;
817: pdq_uint32_t smt_max_version_id;
818: pdq_uint32_t smt_min_version_id;
819: /* Station Status Attributes */
820: pdq_station_state_t station_state;
821: /* Link Characteristic Attributes */
822: pdq_lanaddr_t link_address;
823: pdq_fdditimer_t t_req;
824: pdq_fdditimer_t tvx;
825: pdq_fdditimer_t restricted_token_timeout;
826: pdq_boolean_t ring_purger_enable;
827: pdq_link_state_t link_state;
828: pdq_fdditimer_t negotiated_trt;
829: pdq_da_test_state_t dup_addr_flag;
830: /* Link Status Attributes */
831: pdq_lanaddr_t upstream_neighbor;
832: pdq_lanaddr_t old_upstream_neighbor;
833: pdq_boolean_t upstream_neighbor_dup_addr_flag;
834: pdq_lanaddr_t downstream_neighbor;
835: pdq_lanaddr_t old_downstream_neighbor;
836: pdq_ring_purger_state_t ring_purger_state;
837: pdq_frame_strip_mode_t frame_strip_mode;
838: pdq_ring_error_reason_t ring_error_reason;
839: pdq_boolean_t loopback;
840: pdq_fdditimer_t ring_latency;
841: pdq_lanaddr_t last_dir_beacon_sa;
842: pdq_lanaddr_t last_dir_beacon_una;
843: /* Phy Characteristic Attributes */
844: pdq_phy_type_t phy_type[2];
845: pdq_pmd_type_t pmd_type[2];
846: pdq_uint32_t lem_threshold[2];
847: /* Phy Status Attributes */
848: pdq_phy_state_t phy_state[2];
849: pdq_phy_type_t neighbor_phy_type[2];
850: pdq_uint32_t link_error_estimate[2];
851: pdq_broken_reason_t broken_reason[2];
852: pdq_reject_reason_t reject_reason[2];
853: /* Miscellaneous */
854: pdq_uint32_t counter_interval;
855: pdq_fwrev_t module_rev;
856: pdq_fwrev_t firmware_rev;
857: pdq_uint32_t mop_device_type;
858: pdq_uint32_t fddi_led[2];
859: pdq_uint32_t flush;
860: } status_chars_get;
861: } pdq_response_status_chars_get_t;
862:
863: #define PDQ_SIZE_RESPONSE_STATUS_CHARS_GET 0xF0
864:
865: typedef struct {
866: pdq_uint32_t fddi_mib_get_reserved;
867: pdq_cmd_code_t fddi_mib_get_op;
868: pdq_response_code_t fddi_mib_get_status;
869: struct {
870: /* SMT Objects */
871: pdq_station_id_t smt_station_id;
872: pdq_uint32_t smt_op_version_id;
873: pdq_uint32_t smt_hi_version_id;
874: pdq_uint32_t smt_lo_version_id;
875: pdq_uint32_t smt_mac_ct;
876: pdq_uint32_t smt_non_master_ct;
877: pdq_uint32_t smt_master_ct;
878: pdq_uint32_t smt_paths_available;
879: pdq_uint32_t smt_config_capabilities;
880: pdq_uint32_t smt_config_policy;
881: pdq_uint32_t smt_connection_policy;
882: pdq_uint32_t smt_t_notify;
883: pdq_uint32_t smt_status_reporting;
884: pdq_uint32_t smt_ecm_state;
885: pdq_uint32_t smt_cf_state;
886: pdq_uint32_t smt_hold_state;
887: pdq_uint32_t smt_remote_disconnect_flag;
888: pdq_uint32_t smt_station_action;
889: /* MAC Objects */
890: pdq_uint32_t mac_frame_status_capabilities;
891: pdq_uint32_t mac_t_max_greatest_lower_bound;
892: pdq_uint32_t mac_tvx_greatest_lower_bound;
893: pdq_uint32_t mac_paths_available;
894: pdq_uint32_t mac_current_path;
895: pdq_lanaddr_t mac_upstream_neighbor;
896: pdq_lanaddr_t mac_old_upstream_neighbor;
897: pdq_uint32_t mac_dup_addr_test;
898: pdq_uint32_t mac_paths_requested;
899: pdq_uint32_t mac_downstream_port_type;
900: pdq_lanaddr_t mac_smt_address;
901: pdq_uint32_t mac_t_req;
902: pdq_uint32_t mac_t_neg;
903: pdq_uint32_t mac_t_max;
904: pdq_uint32_t mac_tvx_value;
905: pdq_uint32_t mac_t_min;
906: pdq_uint32_t mac_current_frame_status;
907: pdq_uint32_t mac_frame_error_threshold;
908: pdq_uint32_t mac_frame_error_ratio;
909: pdq_uint32_t mac_rmt_state;
910: pdq_uint32_t mac_da_flag;
911: pdq_uint32_t mac_una_da_flag;
912: pdq_uint32_t mac_frame_condition;
913: pdq_uint32_t mac_chip_set;
914: pdq_uint32_t mac_action;
915: /* Port Objects */
916: pdq_uint32_t port_pc_type[2];
917: pdq_uint32_t port_pc_neighbor[2];
918: pdq_uint32_t port_connection_policies[2];
919: pdq_uint32_t port_remote_mac_indicated[2];
920: pdq_uint32_t port_ce_state[2];
921: pdq_uint32_t port_paths_requested[2];
922: pdq_uint32_t port_mac_placement[2];
923: pdq_uint32_t port_available_paths[2];
924: pdq_uint32_t port_mac_loop_time[2];
925: pdq_uint32_t port_tb_max[2];
926: pdq_uint32_t port_bs_flag[2];
927: pdq_uint32_t port_ler_estimate[2];
928: pdq_uint32_t port_ler_cutoff[2];
929: pdq_uint32_t port_ler_alarm[2];
930: pdq_uint32_t port_connect_state[2];
931: pdq_uint32_t port_pcm_state[2];
932: pdq_uint32_t port_pc_withhold[2];
933: pdq_uint32_t port_ler_condition[2];
934: pdq_uint32_t port_chip_set[2];
935: pdq_uint32_t port_action[2];
936: /* Attachment Objects */
937: pdq_uint32_t attachment_class;
938: pdq_uint32_t attachment_optical_bypass_present;
939: pdq_uint32_t attachment_imax_expiration;
940: pdq_uint32_t attachment_inserted_status;
941: pdq_uint32_t attachment_insert_policy;
942: } fddi_mib_get;
943: } pdq_response_fddi_mib_get_t;
944:
945: #define PDQ_SIZE_RESPONSE_FDDI_MIB_GET 0x17C
946:
947: typedef enum {
948: PDQ_FDX_STATE_IDLE=0,
949: PDQ_FDX_STATE_REQUEST=1,
950: PDQ_FDX_STATE_CONFIRM=2,
951: PDQ_FDX_STATE_OPERATION=3
952: } pdq_fdx_state_t;
953:
954: typedef struct {
955: pdq_uint32_t dec_ext_mib_get_reserved;
956: pdq_cmd_code_t dec_ext_mib_get_op;
957: pdq_response_code_t dec_ext_mib_get_response;
958: struct {
959: /* SMT Objects */
960: pdq_uint32_t esmt_station_type;
961: /* MAC Objects */
962: pdq_uint32_t emac_link_state;
963: pdq_uint32_t emac_ring_purger_state;
964: pdq_uint32_t emac_ring_purger_enable;
965: pdq_uint32_t emac_frame_strip_mode;
966: pdq_uint32_t emac_ring_error_reason;
967: pdq_uint32_t emac_upstream_nbr_dupl_address_flag;
968: pdq_uint32_t emac_restricted_token_timeout;
969: /* Port Objects */
970: pdq_uint32_t eport_pmd_type[2];
971: pdq_uint32_t eport_phy_state[2];
972: pdq_uint32_t eport_reject_reason[2];
973: /* Full Duplex Objects */
974: pdq_boolean_t fdx_enable;
975: pdq_boolean_t fdx_operational;
976: pdq_fdx_state_t fdx_state;
977: } dec_ext_mib_get;
978: } pdq_response_dec_ext_mib_get_t;
979:
980: #define PDQ_SIZE_RESPONSE_DEC_EXT_MIB_GET 0x50
981:
982: typedef enum {
983: PDQ_CALLER_ID_NONE=0,
984: PDQ_CALLER_ID_SELFTEST=1,
985: PDQ_CALLER_ID_MFG=2,
986: PDQ_CALLER_ID_FIRMWARE=5,
987: PDQ_CALLER_ID_CONSOLE=8
988: } pdq_caller_id_t;
989:
990: typedef struct {
991: pdq_uint32_t error_log_get__reserved;
992: pdq_cmd_code_t error_log_get_op;
993: pdq_response_code_t error_log_get_status;
994: /* Error Header */
995: pdq_uint32_t error_log_get_event_status;
996: /* Event Information Block */
997: pdq_caller_id_t error_log_get_caller_id;
998: pdq_uint32_t error_log_get_timestamp[2];
999: pdq_uint32_t error_log_get_write_count;
1000: /* Diagnostic Information */
1001: pdq_uint32_t error_log_get_fru_implication_mask;
1002: pdq_uint32_t error_log_get_test_id;
1003: pdq_uint32_t error_log_get_diag_reserved[6];
1004: /* Firmware Information */
1005: pdq_uint32_t error_log_get_fw_reserved[112];
1006: } pdq_response_error_log_get_t;
1007:
1008:
1009: /*
1010: * Definitions for the Unsolicited Event Queue.
1011: */
1012: typedef enum {
1013: PDQ_UNSOLICITED_EVENT=0,
1014: PDQ_UNSOLICITED_COUNTERS=1
1015: } pdq_event_t;
1016:
1017: typedef enum {
1018: PDQ_ENTITY_STATION=0,
1019: PDQ_ENTITY_LINK=1,
1020: PDQ_ENTITY_PHY_PORT=2
1021: } pdq_entity_t;
1022:
1023: typedef enum {
1024: PDQ_STATION_EVENT_TRACE_RECEIVED=1
1025: } pdq_station_event_t;
1026:
1027: typedef enum {
1028: PDQ_STATION_EVENT_ARGUMENT_REASON=0, /* pdq_uint32_t */
1029: PDQ_STATION_EVENT_ARGUMENT_EOL=0xFF
1030: } pdq_station_event_argument_t;
1031:
1032: typedef enum {
1033: PDQ_LINK_EVENT_TRANSMIT_UNDERRUN=0,
1034: PDQ_LINK_EVENT_TRANSMIT_FAILED=1,
1035: PDQ_LINK_EVENT_BLOCK_CHECK_ERROR=2,
1036: PDQ_LINK_EVENT_FRAME_STATUS_ERROR=3,
1037: PDQ_LINK_EVENT_PDU_LENGTH_ERROR=4,
1038: PDQ_LINK_EVENT_RECEIVE_DATA_OVERRUN=7,
1039: PDQ_LINK_EVENT_NO_USER_BUFFER=9,
1040: PDQ_LINK_EVENT_RING_INITIALIZATION_INITIATED=10,
1041: PDQ_LINK_EVENT_RING_INITIALIZATION_RECEIVED=11,
1042: PDQ_LINK_EVENT_RING_BEACON_INITIATED=12,
1043: PDQ_LINK_EVENT_DUPLICATE_ADDRESS_FAILURE=13,
1044: PDQ_LINK_EVENT_DUPLICATE_TOKEN_DETECTED=14,
1045: PDQ_LINK_EVENT_RING_PURGE_ERROR=15,
1046: PDQ_LINK_EVENT_FCI_STRIP_ERROR=16,
1047: PDQ_LINK_EVENT_TRACE_INITIATED=17,
1048: PDQ_LINK_EVENT_DIRECTED_BEACON_RECEIVED=18
1049: } pdq_link_event_t;
1050:
1051: typedef enum {
1052: PDQ_LINK_EVENT_ARGUMENT_REASON=0, /* pdq_rireason_t */
1053: PDQ_LINK_EVENT_ARGUMENT_DATA_LINK_HEADER=1, /* pdq_dlhdr_t */
1054: PDQ_LINK_EVENT_ARGUMENT_SOURCE=2, /* pdq_lanaddr_t */
1055: PDQ_LINK_EVENT_ARGUMENT_UPSTREAM_NEIGHBOR=3,/* pdq_lanaddr_t */
1056: PDQ_LINK_EVENT_ARGUMENT_EOL=0xFF
1057: } pdq_link_event_argument_t;
1058:
1059: typedef enum {
1060: PDQ_PHY_EVENT_LEM_ERROR_MONITOR_REJECT=0,
1061: PDQ_PHY_EVENT_ELASTICITY_BUFFER_ERROR=1,
1062: PDQ_PHY_EVENT_LINK_CONFIDENCE_TEST_REJECT=2
1063: } pdq_phy_event_t;
1064:
1065: typedef enum {
1066: PDQ_PHY_EVENT_ARGUMENT_DIRECTION=0, /* pdq_lct_direction_t */
1067: PDQ_PHY_EVENT_ARGUMENT_EOL=0xFF
1068: } pdq_phy_event_arguments;
1069:
1070: struct _pdq_unsolicited_event_t {
1071: pdq_uint32_t rvent_reserved;
1072: pdq_event_t event_type;
1073: pdq_entity_t event_entity;
1074: pdq_uint32_t event_index;
1075: union {
1076: pdq_station_event_t station_event;
1077: pdq_link_event_t link_event;
1078: pdq_phy_event_t phy_event;
1079: pdq_uint32_t value;
1080: } event_code;
1081: /*
1082: * The remainder of this event is an argument list.
1083: */
1084: pdq_uint32_t event__filler[123];
1085: };
1086:
1087: #endif /* _PDQREG_H */
CVSweb