Annotation of sys/dev/pci/if_san_xilinx.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: if_san_xilinx.h,v 1.4 2004/07/16 15:11:45 alex Exp $ */
! 2:
! 3: /*-
! 4: * Copyright (c) 2001-2004 Sangoma Technologies (SAN)
! 5: * All rights reserved. www.sangoma.com
! 6: *
! 7: * This code is written by Nenad Corbic <ncorbic@sangoma.com> for SAN.
! 8: * The code is derived from permitted modifications to software created
! 9: * by Alex Feldman (al.feldman@sangoma.com).
! 10: *
! 11: * Redistribution and use in source and binary forms, with or without
! 12: * modification, are permitted provided that the following conditions
! 13: * are met:
! 14: * 1. Redistributions of source code must retain the above copyright
! 15: * notice, this list of conditions and the following disclaimer.
! 16: * 2. Redistributions in binary form must reproduce the above
! 17: * copyright notice, this list of conditions and the following disclaimer
! 18: * in the documentation and/or other materials provided with the
! 19: * distribution.
! 20: * 3. Neither the name of Sangoma Technologies nor the names of its
! 21: * contributors may be used to endorse or promote products derived
! 22: * from this software without specific prior written permission.
! 23: *
! 24: * THIS SOFTWARE IS PROVIDED BY SANGOMA TECHNOLOGIES AND CONTRIBUTORS
! 25: * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! 26: * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
! 27: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
! 28: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
! 29: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
! 30: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
! 31: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
! 32: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
! 33: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
! 34: * THE POSSIBILITY OF SUCH DAMAGE.
! 35: */
! 36:
! 37: #ifndef __IF_SAN_XILINX_H
! 38: #define __IF_SAN_XILINX_H
! 39:
! 40: #define XILINX_CHIP_CFG_REG 0x40
! 41:
! 42: #define XILINX_MCPU_INTERFACE 0x44
! 43: #define XILINX_MCPU_INTERFACE_ADDR 0x46
! 44:
! 45: #define XILINX_GLOBAL_INTER_MASK 0x4C
! 46:
! 47:
! 48: #define XILINX_HDLC_TX_INTR_PENDING_REG 0x50
! 49: #define XILINX_HDLC_RX_INTR_PENDING_REG 0x54
! 50:
! 51: enum {
! 52: WP_FIFO_ERROR_BIT,
! 53: WP_CRC_ERROR_BIT,
! 54: WP_ABORT_ERROR_BIT,
! 55: };
! 56:
! 57: #define WP_MAX_FIFO_FRAMES 7
! 58:
! 59: #define XILINX_DMA_TX_INTR_PENDING_REG 0x58
! 60: #define XILINX_DMA_RX_INTR_PENDING_REG 0x5C
! 61:
! 62: #define XILINX_TIMESLOT_HDLC_CHAN_REG 0x60
! 63:
! 64: #define AFT_T3_RXTX_ADDR_SELECT_REG 0x60
! 65:
! 66: #define XILINX_CURRENT_TIMESLOT_MASK 0x00001F00
! 67: #define XILINX_CURRENT_TIMESLOT_SHIFT 8
! 68:
! 69: #define XILINX_HDLC_CONTROL_REG 0x64
! 70: #define XILINX_HDLC_ADDR_REG 0x68
! 71:
! 72: #define XILINX_CONTROL_RAM_ACCESS_BUF 0x6C
! 73:
! 74:
! 75:
! 76: #define XILINX_DMA_CONTROL_REG 0x70
! 77: #define XILINX_DMA_TX_STATUS_REG 0x74
! 78: #define AFT_TE3_TX_WDT_CTRL_REG 0x74
! 79: #define XILINX_DMA_RX_STATUS_REG 0x78
! 80: #define AFT_TE3_RX_WDT_CTRL_REG 0x78
! 81: #define XILINX_DMA_DATA_REG 0x7C
! 82:
! 83: #define AFT_TE3_CRNT_DMA_DESC_ADDR_REG 0x80
! 84:
! 85: #define XILINX_TxDMA_DESCRIPTOR_LO 0x100
! 86: #define XILINX_TxDMA_DESCRIPTOR_HI 0x104
! 87: #define XILINX_RxDMA_DESCRIPTOR_LO 0x108
! 88: #define XILINX_RxDMA_DESCRIPTOR_HI 0x10C
! 89:
! 90:
! 91: #define INTERFACE_TYPE_T1_E1_BIT 0
! 92: #define INTERFACE_TYPE_T3_E3_BIT 0
! 93:
! 94: #define XILINX_RED_LED 1
! 95: #define AFT_T3_HDLC_TRANS_MODE 1
! 96: #define FRONT_END_FRAME_FLAG_ENABLE_BIT 2
! 97: #define AFT_T3_CLOCK_MODE 2
! 98: #define SIGNALLING_ENABLE_BIT 3
! 99: #define FRONT_END_RESET_BIT 4
! 100: #define CHIP_RESET_BIT 5
! 101: #define HDLC_CORE_RESET_BIT 6
! 102: #define HDLC_CORE_READY_FLAG_BIT 7
! 103: #define GLOBAL_INTR_ENABLE_BIT 8
! 104: #define ERROR_INTR_ENABLE_BIT 9
! 105: #define FRONT_END_INTR_ENABLE_BIT 10
! 106:
! 107: #define CHIP_ERROR_MASK 0x00FF0000
! 108:
! 109: #define AFT_TE3_TX_WDT_INTR_PND 26
! 110: #define AFT_TE3_RX_WDT_INTR_PND 27
! 111:
! 112: #define FRONT_END_INTR_FLAG 28
! 113: #define SECURITY_STATUS_FLAG 29
! 114: #define ERROR_INTR_FLAG 30
! 115: #define DMA_INTR_FLAG 31
! 116:
! 117: #define XILINX_GLOBAL_INTER_STATUS 0xD0000000
! 118:
! 119: #define TIMESLOT_BIT_SHIFT 16
! 120: #define TIMESLOT_BIT_MASK 0x001F0000
! 121: #define HDLC_LOGIC_CH_BIT_MASK 0x0000001F
! 122:
! 123: #define HDLC_LCH_TIMESLOT_MASK 0x001F001F
! 124:
! 125:
! 126: #define HDLC_RX_CHAN_ENABLE_BIT 0
! 127: #define HDLC_RX_FRAME_DATA_BIT 1
! 128: #define HDLC_RC_CHAN_ACTIVE_BIT 2
! 129: #define HDLC_RX_FRAME_ERROR_BIT 3
! 130: #define HDLC_RX_FRAME_ABORT_BIT 4
! 131: #define HDLC_RX_PROT_DISABLE_BIT 16
! 132: #define HDLC_RX_ADDR_RECOGN_DIS_BIT 17
! 133: #define HDLC_RX_ADDR_FIELD_DISC_BIT 18
! 134: #define HDLC_RX_ADDR_SIZE_BIT 19
! 135: #define HDLC_RX_BRD_ADDR_MATCH_BIT 20
! 136: #define HDLC_RX_FCS_SIZE_BIT 21
! 137: #define HDLC_CORE_RX_IDLE_LINE_BIT 22
! 138: #define HDLC_CODE_RX_ABORT_LINE_BIT 23
! 139: #define HDLC_TX_CHAN_ENABLE_BIT 24
! 140: #define HDLC_TX_PROT_DISABLE_BIT 25
! 141: #define HDLC_TX_ADDR_INSERTION_BIT 26
! 142: #define HDLC_TX_ADDR_SIZE_BIT 27
! 143: #define HDLC_TX_FCS_SIZE_BIT 28
! 144: #define HDLC_TX_FRAME_ABORT_BIT 29
! 145: #define HDLC_TX_STOP_TX_ON_ABORT_BIT 30
! 146: #define HDLC_TX_CHANNEL_ACTIVE_BIT 31
! 147:
! 148:
! 149: #define CONTROL_RAM_DATA_MASK 0x0000001F
! 150:
! 151:
! 152: #define HDLC_FIFO_BASE_ADDR_SHIFT 16
! 153: #define HDLC_FIFO_BASE_ADDR_MASK 0x1F
! 154:
! 155: #define HDLC_FIFO_SIZE_SHIFT 8
! 156: #define HDLC_FIFO_SIZE_MASK 0x1F
! 157:
! 158: #define HDLC_FREE_LOGIC_CH 31
! 159: #define TRANSPARENT_MODE_BIT 31
! 160:
! 161:
! 162: #define DMA_SIZE_BIT_SHIFT 0
! 163: #define DMA_FIFO_HI_MARK_BIT_SHIFT 4
! 164: #define DMA_FIFO_LO_MARK_BIT_SHIFT 8
! 165: #define DMA_FIFO_T3_MARK_BIT_SHIFT 8
! 166:
! 167: #define DMA_ACTIVE_CHANNEL_BIT_SHIFT 16
! 168: #define DMA_ACTIVE_CHANNEL_BIT_MASK 0xFFE0FFFF
! 169:
! 170: #define DMA_ENGINE_ENABLE_BIT 31
! 171:
! 172: #define DMA_CHAIN_TE3_MASK 0x0000000F
! 173:
! 174: #define TxDMA_LO_PC_ADDR_PTR_BIT_MASK 0xFFFFFFFC
! 175: #define TxDMA_LO_ALIGNMENT_BIT_MASK 0x00000003
! 176: #define TxDMA_HI_DMA_DATA_LENGTH_MASK 0x000007FF
! 177:
! 178: #define TxDMA_HI_DMA_PCI_ERROR_MASK 0x00007800
! 179: #define TxDMA_HI_DMA_PCI_ERROR_M_ABRT 0x00000800
! 180: #define TxDMA_HI_DMA_PCI_ERROR_T_ABRT 0x00001000
! 181: #define TxDMA_HI_DMA_PCI_ERROR_DS_TOUT 0x00002000
! 182: #define TxDMA_HI_DMA_PCI_ERROR_RETRY_TOUT 0x00004000
! 183:
! 184:
! 185: #define INIT_DMA_FIFO_CMD_BIT 28
! 186: #define TxDMA_HI_DMA_FRAME_START_BIT 30
! 187: #define TxDMA_HI_DMA_FRAME_END_BIT 29
! 188: #define TxDMA_HI_DMA_GO_READY_BIT 31
! 189: #define DMA_FIFO_BASE_ADDR_SHIFT 20
! 190: #define DMA_FIFO_BASE_ADDR_MASK 0x1F
! 191: #define DMA_FIFO_SIZE_SHIFT 15
! 192: #define DMA_FIFO_SIZE_MASK 0x1F
! 193:
! 194: #define DMA_FIFO_PARAM_CLEAR_MASK 0xFE007FFF
! 195:
! 196: #define FIFO_32B 0x00
! 197: #define FIFO_64B 0x01
! 198: #define FIFO_128B 0x03
! 199: #define FIFO_256B 0x07
! 200: #define FIFO_512B 0x0F
! 201: #define FIFO_1024B 0x1F
! 202:
! 203:
! 204: #define RxDMA_LO_PC_ADDR_PTR_BIT_MASK 0xFFFFFFFC
! 205: #define RxDMA_LO_ALIGNMENT_BIT_MASK 0x00000003
! 206: #define RxDMA_HI_DMA_DATA_LENGTH_MASK 0x000007FF
! 207:
! 208: #define RxDMA_HI_DMA_PCI_ERROR_MASK 0x00007800
! 209: #define RxDMA_HI_DMA_PCI_ERROR_M_ABRT 0x00000800
! 210: #define RxDMA_HI_DMA_PCI_ERROR_T_ABRT 0x00001000
! 211: #define RxDMA_HI_DMA_PCI_ERROR_DS_TOUT 0x00002000
! 212: #define RxDMA_HI_DMA_PCI_ERROR_RETRY_TOUT 0x00004000
! 213:
! 214:
! 215: #define RxDMA_HI_DMA_COMMAND_BIT_SHIFT 28
! 216: #define RxDMA_HI_DMA_FRAME_START_BIT 30
! 217: #define RxDMA_HI_DMA_CRC_ERROR_BIT 25
! 218: #define RxDMA_HI_DMA_FRAME_ABORT_BIT 26
! 219: #define RxDMA_HI_DMA_FRAME_END_BIT 29
! 220: #define RxDMA_HI_DMA_GO_READY_BIT 31
! 221:
! 222: #define DMA_HI_TE3_INTR_DISABLE_BIT 27
! 223: #define DMA_HI_TE3_NOT_LAST_FRAME_BIT 24
! 224:
! 225: #define AFT_TE3_CRNT_TX_DMA_MASK 0x0000000F
! 226: #define AFT_TE3_CRNT_RX_DMA_MASK 0x000000F0
! 227: #define AFT_TE3_CRNT_RX_DMA_SHIFT 4
! 228:
! 229: typedef struct xilinx_config
! 230: {
! 231: unsigned long xilinx_chip_cfg_reg;
! 232: unsigned long xilinx_dma_control_reg;
! 233: } xilinx_config_t;
! 234:
! 235:
! 236: #define XILINX_DMA_SIZE 10
! 237: #define XILINX_DMA_FIFO_UP 8
! 238: #define XILINX_DMA_FIFO_LO 8
! 239: #define AFT_T3_DMA_FIFO_MARK 8
! 240: #define XILINX_DEFLT_ACTIVE_CH 0
! 241:
! 242: #define MAX_XILINX_TX_DMA_SIZE 0xFFFF
! 243:
! 244: #define MIN_WP_PRI_MTU 128
! 245: #define DEFAULT_WP_PRI_MTU 1500
! 246: #define MAX_WP_PRI_MTU 8188
! 247:
! 248:
! 249: #define MAX_DATA_SIZE 2000
! 250: struct sdla_hdlc_api {
! 251: unsigned int cmd;
! 252: unsigned short len;
! 253: unsigned char bar;
! 254: unsigned short offset;
! 255: unsigned char data[MAX_DATA_SIZE];
! 256: };
! 257:
! 258: #pragma pack(1)
! 259: typedef struct {
! 260: unsigned char error_flag;
! 261: unsigned short time_stamp;
! 262: unsigned char reserved[13];
! 263: } api_rx_hdr_t;
! 264:
! 265: typedef struct {
! 266: api_rx_hdr_t api_rx_hdr;
! 267: unsigned char data[1];
! 268: } api_rx_element_t;
! 269:
! 270: typedef struct {
! 271: unsigned char attr;
! 272: unsigned char misc_Tx_bits;
! 273: unsigned char reserved[14];
! 274: } api_tx_hdr_t;
! 275:
! 276: typedef struct {
! 277: api_tx_hdr_t api_tx_hdr;
! 278: unsigned char data[1];
! 279: } api_tx_element_t;
! 280: #pragma pack()
! 281:
! 282: #undef wan_udphdr_data
! 283: #define wan_udphdr_data wan_udphdr_u.aft.data
! 284:
! 285:
! 286:
! 287: #define PMC_CONTROL_REG 0x00
! 288:
! 289:
! 290: #define PMC_RESET_BIT 0
! 291: #define PMC_CLOCK_SELECT 1
! 292:
! 293: #define LED_CONTROL_REG 0x01
! 294:
! 295: #define JP8_VALUE 0x02
! 296: #define JP7_VALUE 0x01
! 297: #define SW0_VALUE 0x04
! 298: #define SW1_VALUE 0x08
! 299:
! 300:
! 301: #define SECURITY_CPLD_REG 0x09
! 302:
! 303: #define SECURITY_CPLD_MASK 0x03
! 304: #define SECURITY_CPLD_SHIFT 0x02
! 305:
! 306: #define SECURITY_1LINE_UNCH 0x00
! 307: #define SECURITY_1LINE_CH 0x01
! 308: #define SECURITY_2LINE_UNCH 0x02
! 309: #define SECURITY_2LINE_CH 0x03
! 310:
! 311:
! 312:
! 313: #define WRITE_DEF_SECTOR_DSBL 0x01
! 314: #define FRONT_END_TYPE_MASK 0x38
! 315:
! 316: #define BIT_DEV_ADDR_CLEAR 0x600
! 317: #define BIT_DEV_ADDR_CPLD 0x200
! 318:
! 319: #define MEMORY_TYPE_SRAM 0x00
! 320: #define MEMORY_TYPE_FLASH 0x01
! 321: #define MASK_MEMORY_TYPE_SRAM 0x10
! 322: #define MASK_MEMORY_TYPE_FLASH 0x20
! 323:
! 324: #define BIT_A18_SECTOR_SA4_SA7 0x20
! 325: #define USER_SECTOR_START_ADDR 0x40000
! 326:
! 327: #define MAX_TRACE_QUEUE 100
! 328:
! 329: #define TX_DMA_BUF_INIT 0
! 330:
! 331: #define MAX_TRACE_BUFFER (MAX_LGTH_UDP_MGNT_PKT - \
! 332: sizeof(iphdr_t) - \
! 333: sizeof(udphdr_t) - \
! 334: sizeof(wan_mgmt_t) - \
! 335: sizeof(wan_trace_info_t) - \
! 336: sizeof(wan_cmd_t))
! 337:
! 338: enum {
! 339: ROUTER_UP_TIME = 0x50,
! 340: ENABLE_TRACING,
! 341: DISABLE_TRACING,
! 342: GET_TRACE_INFO,
! 343: READ_CODE_VERSION,
! 344: FLUSH_OPERATIONAL_STATS,
! 345: OPERATIONAL_STATS,
! 346: READ_OPERATIONAL_STATS,
! 347: READ_CONFIGURATION,
! 348: COMMS_ERROR_STATS_STRUCT,
! 349: AFT_LINK_STATUS
! 350: };
! 351:
! 352: #define UDPMGMT_SIGNATURE "AFTPIPEA"
! 353:
! 354:
! 355: typedef struct {
! 356: unsigned char flag;
! 357: unsigned short length;
! 358: unsigned char rsrv0[2];
! 359: unsigned char attr;
! 360: unsigned short tmstamp;
! 361: unsigned char rsrv1[4];
! 362: unsigned long offset;
! 363: } aft_trc_el_t;
! 364:
! 365:
! 366: typedef struct wp_rx_element
! 367: {
! 368: unsigned long dma_addr;
! 369: unsigned int reg;
! 370: unsigned int align;
! 371: unsigned char pkt_error;
! 372: }wp_rx_element_t;
! 373:
! 374:
! 375: #if defined(_KERNEL)
! 376:
! 377: static __inline unsigned short xilinx_valid_mtu(unsigned short mtu)
! 378: {
! 379: if (mtu <= 128) {
! 380: return 128;
! 381: } else if (mtu <= 256) {
! 382: return 256;
! 383: } else if (mtu <= 512) {
! 384: return 512;
! 385: } else if (mtu <= 1024) {
! 386: return 1024;
! 387: } else if (mtu <= 2048) {
! 388: return 2048;
! 389: } else if (mtu <= 4096) {
! 390: return 4096;
! 391: } else if (mtu <= 8188) {
! 392: return 8188;
! 393: } else {
! 394: return 0;
! 395: }
! 396: }
! 397:
! 398: static __inline unsigned short xilinx_dma_buf_bits(unsigned short dma_bufs)
! 399: {
! 400: if (dma_bufs < 2) {
! 401: return 0;
! 402: } else if (dma_bufs < 3) {
! 403: return 1;
! 404: } else if (dma_bufs < 5) {
! 405: return 2;
! 406: } else if (dma_bufs < 9) {
! 407: return 3;
! 408: } else if (dma_bufs < 17) {
! 409: return 4;
! 410: } else {
! 411: return 0;
! 412: }
! 413: }
! 414:
! 415: #define AFT_TX_TIMEOUT 25
! 416: #define AFT_RX_TIMEOUT 10
! 417: #define AFT_MAX_WTD_TIMEOUT 250
! 418:
! 419: static __inline void aft_reset_rx_watchdog(sdla_t *card)
! 420: {
! 421: sdla_bus_write_4(card->hw,AFT_TE3_RX_WDT_CTRL_REG,0);
! 422: }
! 423:
! 424: static __inline void aft_enable_rx_watchdog(sdla_t *card, unsigned char timeout)
! 425: {
! 426: aft_reset_rx_watchdog(card);
! 427: sdla_bus_write_4(card->hw,AFT_TE3_RX_WDT_CTRL_REG,timeout);
! 428: }
! 429:
! 430: static __inline void aft_reset_tx_watchdog(sdla_t *card)
! 431: {
! 432: sdla_bus_write_4(card->hw,AFT_TE3_TX_WDT_CTRL_REG,0);
! 433: }
! 434:
! 435: static __inline void aft_enable_tx_watchdog(sdla_t *card, unsigned char timeout)
! 436: {
! 437: aft_reset_tx_watchdog(card);
! 438: sdla_bus_write_4(card->hw,AFT_TE3_TX_WDT_CTRL_REG,timeout);
! 439: }
! 440:
! 441: #endif
! 442:
! 443: #endif
CVSweb