Annotation of sys/dev/ic/pdqreg.h, Revision 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