[BACK]Return to if_san_xilinx.h CVS log [TXT][DIR] Up to [local] / sys / dev / pci

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