root/dev/pci/if_san_xilinx.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. xilinx_config_t
  2. api_rx_hdr_t
  3. api_rx_element_t
  4. api_tx_hdr_t
  5. api_tx_element_t
  6. aft_trc_el_t
  7. wp_rx_element_t
  8. xilinx_valid_mtu
  9. xilinx_dma_buf_bits
  10. aft_reset_rx_watchdog
  11. aft_enable_rx_watchdog
  12. aft_reset_tx_watchdog
  13. aft_enable_tx_watchdog

    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

/* [<][>][^][v][top][bottom][index][help] */