root/dev/pci/if_san_common.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. wan_conf_t
  2. sdla_dump_t
  3. sdla_exec_t
  4. wan_trace_pkt_t
  5. wan_trace_t
  6. wan_mgmt_t
  7. wan_trace_info_t
  8. wan_udp_hdr_t
  9. wan_udp_pkt_t
  10. wanpipe_common_t
  11. sdla_xilinx_t
  12. sdla_t

    1 /*      $OpenBSD: if_san_common.h,v 1.8 2005/11/08 20:23:42 canacar 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 Alex Feldman <al.feldman@sangoma.com> for SAN.
    8  *
    9  * Redistribution and use in source and binary forms, with or without
   10  * modification, are permitted provided that the following conditions
   11  * are met:
   12  * 1. Redistributions of source code must retain the above copyright
   13  *    notice, this list of conditions and the following disclaimer.
   14  * 2. Redistributions in binary form must reproduce the above
   15  *    copyright notice, this list of conditions and the following disclaimer
   16  *    in the documentation and/or other materials provided with the
   17  *    distribution.
   18  * 3. Neither the name of Sangoma Technologies nor the names of its
   19  *    contributors may be used to endorse or promote products derived
   20  *    from this software without specific prior written permission.
   21  *
   22  * THIS SOFTWARE IS PROVIDED BY SANGOMA TECHNOLOGIES AND CONTRIBUTORS
   23  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   24  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   25  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   26  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   27  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   28  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   29  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   30  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   31  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
   32  * THE POSSIBILITY OF SUCH DAMAGE.
   33  */
   34 
   35 #ifndef __IF_SAN_COMMON_H
   36 #define __IF_SAN_COMMON_H
   37 
   38 # include <dev/pci/if_san_te1.h>
   39 # include <dev/pci/if_sandrv.h>
   40 
   41 #define ADDR_MASK(x,y) (((caddr_t)(x) - (caddr_t)0) & (y))
   42 
   43 #define WANPIPE_LITE_VERSION    "1.1.1"
   44 #define WAN_OPENBSD_PLATFORM    0x06
   45 #define WAN_PLATFORM_ID WAN_OPENBSD_PLATFORM
   46 #define WANPIPE_MAGIC   0x414C4453L     /* signature: 'SDLA' reversed */
   47 
   48 #define ROUTER_NAME     "wanrouter"     /* in case we ever change it */
   49 #define ROUTER_IOCTL    'W'             /* for IOCTL calls */
   50 
   51 #define WANROUTER_MAJOR_VER     2
   52 #define WANROUTER_MINOR_VER     1
   53 
   54 /* IOCTL codes for /proc/router/<device> entries (up to 255) */
   55 #define WANPIPE_DUMP    _IOW(ROUTER_IOCTL, 16, wan_conf_t)
   56 #define WANPIPE_EXEC    _IOWR(ROUTER_IOCTL, 17, wan_conf_t)
   57 
   58 /* get monitor statistics */
   59 #define SIOC_WANPIPE_PIPEMON    _IOWR('i', 150, struct ifreq)
   60 
   61 /* set generic device */
   62 #define SIOC_WANPIPE_DEVICE     _IOWR('i', 151, struct ifreq)
   63 
   64 /* get hwprobe string */
   65 #define SIOC_WANPIPE_HWPROBE    _IOWR('i', 152, struct ifreq)
   66 
   67 /* get memdump string (GENERIC) */
   68 #define SIOC_WANPIPE_DUMP       _IOWR('i', 153, struct ifreq)
   69 
   70 
   71 /* clocking options */
   72 #define WAN_EXTERNAL    0
   73 #define WAN_INTERNAL    1
   74 
   75 /* intercace options */
   76 #define WAN_RS232       0
   77 #define WAN_V35 1
   78 
   79 #define WAN_UDP_FAILED_CMD      0xCF
   80 #define WAN_UDP_INVALID_CMD     0xCE
   81 #define WAN_UDP_TIMEOUT_CMD     0xAA
   82 #define WAN_UDP_INVALID_NET_CMD     0xCD
   83 
   84 #define WAN_NO  0
   85 #define WAN_YES 1
   86 
   87 /* UDP Packet Management */
   88 #define UDP_PKT_FRM_STACK       0x00
   89 #define UDP_PKT_FRM_NETWORK     0x01
   90 
   91 #define WANCONFIG_FR    102     /* frame relay link */
   92 #define WANCONFIG_PPP   103     /* synchronous PPP link */
   93 #define WANCONFIG_CHDLC 104     /* Cisco HDLC Link */
   94 #define WANCONFIG_AFT    117    /* AFT Hardware Support */
   95 /****** Data Types **********************************************************/
   96 
   97 
   98 /* Front-End status */
   99 enum fe_status {
  100         FE_UNITIALIZED = 0x00,
  101         FE_DISCONNECTED,
  102         FE_CONNECTED
  103 };
  104 
  105 /* 'state' defines */
  106 enum wan_states
  107 {
  108         WAN_UNCONFIGURED,       /* link/channel is not configured */
  109         WAN_DISCONNECTED,       /* link/channel is disconnected */
  110         WAN_CONNECTING,         /* connection is in progress */
  111         WAN_CONNECTED,          /* link/channel is operational */
  112         WAN_LIMIT,              /* for verification only */
  113         WAN_DUALPORT,           /* for Dual Port cards */
  114         WAN_DISCONNECTING,
  115         WAN_FT1_READY           /* FT1 Configurator Ready */
  116 };
  117 
  118 /* 'modem_status' masks */
  119 #define WAN_MODEM_CTS   0x0001  /* CTS line active */
  120 #define WAN_MODEM_DCD   0x0002  /* DCD line active */
  121 #define WAN_MODEM_DTR   0x0010  /* DTR line active */
  122 #define WAN_MODEM_RTS   0x0020  /* RTS line active */
  123 
  124 typedef struct wan_conf {
  125         char    devname[IFNAMSIZ+1];
  126         void*   arg;
  127 } wan_conf_t;
  128 
  129 
  130 /* IOCTL numbers (up to 16) */
  131 
  132 #define TRACE_ALL                       0x00
  133 #define TRACE_PROT                      0x01
  134 #define TRACE_DATA                      0x02
  135 
  136 /* values for request/reply byte */
  137 #define UDPMGMT_REQUEST 0x01
  138 #define UDPMGMT_REPLY   0x02
  139 #define UDP_OFFSET      12
  140 
  141 #define MAX_FT1_RETRY   100
  142 
  143 /* General Critical Flags */
  144 enum {
  145         SEND_CRIT,
  146         PERI_CRIT,
  147         RX_CRIT,
  148         PRIV_CRIT
  149 };
  150 
  151 /*
  152  * Data structures for IOCTL calls.
  153  */
  154 
  155 typedef struct sdla_dump {      /* WANPIPE_DUMP */
  156         unsigned long   magic;  /* for verification */
  157         unsigned long   offset; /* absolute adapter memory address */
  158         unsigned long   length; /* block length */
  159         void*           ptr;    /* -> buffer */
  160 } sdla_dump_t;
  161 
  162 typedef struct sdla_exec {      /* WANPIPE_EXEC */
  163         unsigned long   magic;  /* for verification */
  164         void*           cmd;    /* -> command structure */
  165         void*           data;   /* -> data buffer */
  166 } sdla_exec_t;
  167 
  168 #define TRC_INCOMING_FRM        0x00
  169 #define TRC_OUTGOING_FRM        0x01
  170 typedef struct {
  171         unsigned char   status;
  172         unsigned char   data_avail;
  173         unsigned short  real_length;
  174         unsigned short  time_stamp;
  175         unsigned long   sec;
  176         unsigned long   usec;
  177         unsigned char   data[0];
  178 } wan_trace_pkt_t;
  179 
  180 typedef struct wan_trace {
  181         unsigned long   tracing_enabled;
  182         struct ifqueue  ifq;
  183         unsigned int    trace_timeout;
  184         unsigned int    max_trace_queue;
  185 } wan_trace_t;
  186 
  187 
  188 /********************************************************
  189  *      GLOBAL DEFINITION FOR SANGOMA UDP STRUCTURE     *
  190  *******************************************************/
  191 #define GLOBAL_UDP_SIGNATURE            "WANPIPE"
  192 #define GLOBAL_UDP_SIGNATURE_LEN        7
  193 #define UDPMGMT_UDP_PROTOCOL            0x11
  194 #define WAN_UDP_CMD_START       0x60
  195 #define WAN_GET_PROTOCOL        (WAN_UDP_CMD_START+0)
  196 #define WAN_GET_PLATFORM        (WAN_UDP_CMD_START+1)
  197 #define WAN_GET_MEDIA_TYPE      (WAN_UDP_CMD_START+2)
  198 #define WAN_UDP_CMD_END         0x6F
  199 
  200 #define WAN_FE_CMD_START        0x90
  201 #define WAN_FE_CMD_END          0x9F
  202 
  203 #define WAN_INTERFACE_CMD_START 0xA0
  204 #define WAN_INTERFACE_CMD_END   0xAF
  205 
  206 #define WAN_FE_UDP_CMD_START    0xB0
  207 #define WAN_FE_UDP_CMD_END      0xBF
  208 
  209 typedef struct {
  210         unsigned char   signature[8];
  211         unsigned char   request_reply;
  212         unsigned char   id;
  213         unsigned char   reserved[6];
  214 } wan_mgmt_t;
  215 
  216 
  217 /****** DEFINITION OF UDP HEADER AND STRUCTURE PER PROTOCOL ******/
  218 typedef struct {
  219         unsigned char   num_frames;
  220         unsigned char   ismoredata;
  221 } wan_trace_info_t;
  222 
  223 typedef struct wan_udp_hdr{
  224         wan_mgmt_t      wan_mgmt;
  225         wan_cmd_t       wan_cmd;
  226         union {
  227                 struct {
  228                         wan_trace_info_t        trace_info;
  229                         unsigned char           data[WAN_MAX_DATA_SIZE];
  230                 } chdlc, aft;
  231                 unsigned char data[WAN_MAX_DATA_SIZE];
  232         } wan_udphdr_u;
  233 #define wan_udphdr_signature            wan_mgmt.signature
  234 #define wan_udphdr_request_reply        wan_mgmt.request_reply
  235 #define wan_udphdr_id                   wan_mgmt.id
  236 #define wan_udphdr_opp_flag             wan_cmd.wan_cmd_opp_flag
  237 #define wan_udphdr_command              wan_cmd.wan_cmd_command
  238 #define wan_udphdr_data_len             wan_cmd.wan_cmd_data_len
  239 #define wan_udphdr_return_code          wan_cmd.wan_cmd_return_code
  240 #define wan_udphdr_chdlc_num_frames     wan_udphdr_u.chdlc.trace_info.num_frames
  241 #define wan_udphdr_chdlc_ismoredata     wan_udphdr_u.chdlc.trace_info.ismoredata
  242 #define wan_udphdr_chdlc_data           wan_udphdr_u.chdlc.data
  243 
  244 #define wan_udphdr_aft_num_frames       wan_udphdr_u.aft.trace_info.num_frames
  245 #define wan_udphdr_aft_ismoredata       wan_udphdr_u.aft.trace_info.ismoredata
  246 #define wan_udphdr_aft_data             wan_udphdr_u.aft.data
  247 #define wan_udphdr_data                 wan_udphdr_u.data
  248 } wan_udp_hdr_t;
  249 
  250 #define MAX_LGTH_UDP_MGNT_PKT 2000
  251 
  252 /* This is used for interrupt testing */
  253 #define INTR_TEST_MODE  0x02
  254 
  255 #define WUM_SIGNATURE_L 0x50495046
  256 #define WUM_SIGNATURE_H 0x444E3845
  257 
  258 #define WUM_KILL        0x50
  259 #define WUM_EXEC        0x51
  260 
  261 
  262 #if defined(_KERNEL)
  263 /****** Kernel Interface ****************************************************/
  264 
  265 
  266 #define MAX_E1_CHANNELS 32
  267 #define MAX_FR_CHANNELS (991+1)
  268 
  269 #ifndef min
  270 #define min(a,b) (((a)<(b))?(a):(b))
  271 #endif
  272 #ifndef max
  273 #define max(a,b) (((a)>(b))?(a):(b))
  274 #endif
  275 
  276 #define is_digit(ch) (((ch)>=(unsigned)'0'&&(ch)<=(unsigned)'9')?1:0)
  277 
  278 #define is_alpha(ch) ((((ch)>=(unsigned)'a'&&(ch)<=(unsigned)'z')||     \
  279                 ((ch)>=(unsigned)'A'&&(ch)<=(unsigned)'Z'))?1:0)
  280 
  281 #define is_hex_digit(ch) ((((ch)>=(unsigned)'0'&&(ch)<=(unsigned)'9')|| \
  282                 ((ch)>=(unsigned)'a'&&(ch)<=(unsigned)'f')||\
  283                 ((ch)>=(unsigned)'A'&&(ch)<=(unsigned)'F'))?1:0)
  284 #if !defined(offsetof)
  285 # define offsetof(type, member) ((size_t)(&((type*)0)->member))
  286 #endif
  287 
  288 # define irqreturn_t    void
  289 /* Unsafe sprintf and vsprintf function removed from the kernel */
  290 # define WAN_IRQ_RETVAL(a)              return;
  291 
  292 #define _bit_byte(bit) ((bit) >> 3)
  293 #define _bit_mask(bit) (1 << ((bit)&0x7))
  294 
  295 /* is bit N of bitstring name set? */
  296 #define bit_test(name, bit) ((name)[_bit_byte(bit)] & _bit_mask(bit))
  297 
  298 /* set bit N of bitstring name */
  299 #define bit_set(name, bit) ((name)[_bit_byte(bit)] |= _bit_mask(bit))
  300 
  301 /* clear bit N of bitstring name */
  302 #define bit_clear(name, bit) ((name)[_bit_byte(bit)] &= ~_bit_mask(bit))
  303 
  304 /* Sangoma assert macro */
  305 #define SAN_ASSERT(a)                                           \
  306         if (a){                                                 \
  307                 log(LOG_INFO, "%s:%d: Critical Error!\n",       \
  308                                 __FUNCTION__,__LINE__);         \
  309                 return (EINVAL);                                \
  310         }
  311 
  312 /****** Data Structures *****************************************************/
  313 
  314 typedef struct wan_udp_pkt {
  315         struct ip       ip_hdr;
  316         struct udphdr   udp_hdr;
  317         wan_udp_hdr_t   wan_udp_hdr;
  318 #define wan_udp_cmd                     wan_udp_hdr.wan_cmd
  319 #define wan_udp_signature               wan_udp_hdr.wan_udphdr_signature
  320 #define wan_udp_request_reply           wan_udp_hdr.wan_udphdr_request_reply
  321 #define wan_udp_id                      wan_udp_hdr.wan_udphdr_id
  322 #define wan_udp_opp_flag                wan_udp_hdr.wan_udphdr_opp_flag
  323 #define wan_udp_command                 wan_udp_hdr.wan_udphdr_command
  324 #define wan_udp_data_len                wan_udp_hdr.wan_udphdr_data_len
  325 #define wan_udp_return_code             wan_udp_hdr.wan_udphdr_return_code
  326 #define wan_udp_hdlc_PF_bit             wan_udp_hdr.wan_udphdr_hdlc_PF_bit
  327 #define wan_udp_fr_dlci                 wan_udp_hdr.wan_udphdr_fr_dlci
  328 #define wan_udp_fr_attr                 wan_udp_hdr.wan_udphdr_fr_attr
  329 #define wan_udp_fr_rxlost1              wan_udp_hdr.wan_udphdr_fr_rxlost1
  330 #define wan_udp_fr_rxlost2              wan_udp_hdr.wan_udphdr_fr_rxlost2
  331 #define wan_udp_chdlc_num_frames        wan_udp_hdr.wan_udphdr_chdlc_num_frames
  332 #define wan_udp_chdlc_ismoredata        wan_udp_hdr.wan_udphdr_chdlc_ismoredata
  333 #define wan_udp_chdlc_data              wan_udp_hdr.wan_udphdr_chdlc_data
  334 
  335 #define wan_udp_aft_num_frames          wan_udp_hdr.wan_udphdr_aft_num_frames
  336 #define wan_udp_aft_ismoredata          wan_udp_hdr.wan_udphdr_aft_ismoredata
  337 #define wan_udp_data                    wan_udp_hdr.wan_udphdr_data
  338 } wan_udp_pkt_t;
  339 
  340 #define WAN_IFP_TO_COMMON(ifp)  (wanpipe_common_t*)((ifp)->if_softc)
  341 typedef struct wanpipe_common {
  342         struct sppp     ifp;
  343         void            *card;
  344         struct timeout  dev_timer;
  345         unsigned int    protocol;
  346         struct ifmedia  ifm;
  347 
  348         LIST_ENTRY(wanpipe_common)      next;
  349 } wanpipe_common_t;
  350 
  351 typedef struct {
  352         unsigned long   time_slot_map;
  353         unsigned long   logic_ch_map;
  354         unsigned char   num_of_time_slots;
  355         unsigned char   top_logic_ch;
  356         unsigned long   bar;
  357         void            *trace_info;
  358         void            *dev_to_ch_map[MAX_E1_CHANNELS];
  359         void            *rx_dma_ptr;
  360         void            *tx_dma_ptr;
  361         unsigned short  num_of_ch;/* Number of logical channels */
  362         unsigned short  dma_per_ch;/* DMA buffers per logic channel */
  363         unsigned short  mru_trans;/* MRU of transparent channels */
  364         unsigned long   dma_mtu_off;
  365         unsigned short  dma_mtu;
  366         unsigned char   state_change_exit_isr;
  367         unsigned long   active_ch_map;
  368         unsigned long   fifo_addr_map;
  369         struct timeout  led_timer;
  370 } sdla_xilinx_t;
  371 
  372 /* Adapter Data Space.
  373  * This structure is needed because we handle multiple cards, otherwise
  374  * static data would do it.
  375  */
  376 typedef struct sdla {
  377         unsigned        magic;
  378         char            devname[IFNAMSIZ+1];    /* card name */
  379         void            *hw;                    /* hw configuration */
  380         unsigned int    type;                   /* adapter type */
  381         unsigned char   line_idle;
  382 
  383         char            state;          /* device state */
  384         unsigned long   critical;       /* critical section flag */
  385 
  386         int(*iface_up) (struct ifnet*);
  387         int(*iface_down) (struct ifnet*);
  388         int(*iface_send) (struct mbuf* skb, struct ifnet*);
  389         int(*iface_ioctl) (struct ifnet*, int, struct ifreq*);
  390 
  391         unsigned long   state_tick;     /* link state timestamp */
  392         unsigned long   in_isr;         /* interrupt-in-service flag */
  393         unsigned long   configured;     /* configurations status */
  394         int(*del_if) (struct sdla*, struct ifnet*);
  395         void(*isr)(struct sdla*);       /* interrupt service routine */
  396         void(*poll)(struct sdla*);      /* polling routine */
  397         int(*exec)(struct sdla*, void*, void*);
  398         int(*ioctl) (struct ifnet*, int, struct ifreq*);
  399 
  400         union {
  401                 sdla_xilinx_t   xilinx;
  402         } u;
  403 
  404         sdla_fe_iface_t fe_iface;
  405         union {
  406 #define fe_te   u_fe.te_sc
  407                 sdla_te_softc_t te_sc;
  408         } u_fe;
  409 
  410         unsigned char           front_end_status;
  411         WRITE_FRONT_END_REG_T*  write_front_end_reg;
  412         READ_FRONT_END_REG_T*   read_front_end_reg;
  413         void(*te_enable_timer) (void*);
  414         void(*te_link_state)  (void*);
  415 
  416         LIST_HEAD(,wanpipe_common)      dev_head;
  417         LIST_ENTRY(sdla)                next;   /* -> next device */
  418 } sdla_t;
  419 
  420 /****** Public Functions ****************************************************/
  421 
  422 void*           wan_xilinx_init(sdla_t*);       /* Xilinx Hardware Support */
  423 struct mbuf*    wan_mbuf_alloc(int);
  424 int             wan_mbuf_to_buffer(struct mbuf**);
  425 
  426 #endif  /* __KERNEL__ */
  427 #endif  /* __IF_SAN_COMMON_H */

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