wanpipe.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:18k
- /*****************************************************************************
- * wanpipe.h WANPIPE(tm) Multiprotocol WAN Link Driver.
- * User-level API definitions.
- *
- * Author: Nenad Corbic <ncorbic@sangoma.com>
- * Gideon Hack
- *
- * Copyright: (c) 1995-2000 Sangoma Technologies Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version
- * 2 of the License, or (at your option) any later version.
- * ============================================================================
- * Nov 3, 2000 Nenad Corbic Added config_id to sdla_t structure.
- * Used to determine the protocol running.
- * Jul 13, 2000 Nenad Corbic Added SyncPPP Support
- * Feb 24, 2000 Nenad Corbic Added support for x25api driver
- * Oct 04, 1999 Nenad Corbic New CHDLC and FRAME RELAY code, SMP support
- * Jun 02, 1999 Gideon Hack Added 'update_call_count' for Cisco HDLC
- * support
- * Jun 26, 1998 David Fong Added 'ip_mode' in sdla_t.u.p for dynamic IP
- * routing mode configuration
- * Jun 12, 1998 David Fong Added Cisco HDLC union member in sdla_t
- * Dec 08, 1997 Jaspreet Singh Added 'authenticator' in union of 'sdla_t'
- * Nov 26, 1997 Jaspreet Singh Added 'load_sharing' structure. Also added
- * 'devs_struct','dev_to_devtint_next' to 'sdla_t'
- * Nov 24, 1997 Jaspreet Singh Added 'irq_dis_if_send_count',
- * 'irq_dis_poll_count' to 'sdla_t'.
- * Nov 06, 1997 Jaspreet Singh Added a define called 'INTR_TEST_MODE'
- * Oct 20, 1997 Jaspreet Singh Added 'buff_intr_mode_unbusy' and
- * 'dlci_intr_mode_unbusy' to 'sdla_t'
- * Oct 18, 1997 Jaspreet Singh Added structure to maintain global driver
- * statistics.
- * Jan 15, 1997 Gene Kozin Version 3.1.0
- * o added UDP management stuff
- * Jan 02, 1997 Gene Kozin Version 3.0.0
- *****************************************************************************/
- #ifndef _WANPIPE_H
- #define _WANPIPE_H
- #include <linux/version.h>
- #ifndef KERNEL_VERSION
- #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
- #endif
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0)
-
- #define LINUX_2_4
- #define netdevice_t struct net_device
- #define FREE_READ 1
- #define FREE_WRITE 0
- #define stop_net_queue(a) netif_stop_queue(a)
- #define start_net_queue(a) netif_start_queue(a)
- #define is_queue_stopped(a) netif_queue_stopped(a)
- #define wake_net_dev(a) netif_wake_queue(a)
- #define is_dev_running(a) netif_running(a)
- #define wan_dev_kfree_skb(a,b) dev_kfree_skb_any(a)
- #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0)
- #define LINUX_2_1
- #define netdevice_t struct device
- #define FREE_READ 1
- #define FREE_WRITE 0
- #define stop_net_queue(a) (set_bit(0, &##a->tbusy))
- #define start_net_queue(a) (clear_bit(0,&##a->tbusy))
- #define is_queue_stopped(a) (##a->tbusy)
- #define wake_net_dev(a) {clear_bit(0,&##a->tbusy);mark_bh(NET_BH);}
- #define is_dev_running(a) (test_bit(0,&##a->start))
- #define wan_dev_kfree_skb(a,b) dev_kfree_skb(a)
- #else
- #define LINUX_2_0
- #define netdevice_t struct device
- #define test_and_set_bit set_bit
- #define net_ratelimit() 1
- #define stop_net_queue(a) (set_bit(0, &##a->tbusy))
- #define start_net_queue(a) (clear_bit(0,&##a->tbusy))
- #define is_queue_stopped(a) (##a->tbusy)
- #define wake_net_dev(a) {clear_bit(0,&##a->tbusy);mark_bh(NET_BH);}
- #define is_dev_running(a) (test_bit(0,(void*)&##a->start))
- #define wan_dev_kfree_skb(a,b) dev_kfree_skb(a,b)
- #define spin_lock_init(a)
- #define spin_lock(a)
- #define spin_unlock(a)
- #endif
- #include <linux/wanrouter.h>
- /* Defines */
- #ifndef PACKED
- #define PACKED __attribute__((packed))
- #endif
- #define WANPIPE_MAGIC 0x414C4453L /* signature: 'SDLA' reversed */
- /* IOCTL numbers (up to 16) */
- #define WANPIPE_DUMP (ROUTER_USER+0) /* dump adapter's memory */
- #define WANPIPE_EXEC (ROUTER_USER+1) /* execute firmware command */
- #define TRACE_ALL 0x00
- #define TRACE_PROT 0x01
- #define TRACE_DATA 0x02
- /* values for request/reply byte */
- #define UDPMGMT_REQUEST 0x01
- #define UDPMGMT_REPLY 0x02
- #define UDP_OFFSET 12
- #define MAX_CMD_BUFF 10
- #define MAX_X25_LCN 255 /* Maximum number of x25 channels */
- #define MAX_LCN_NUM 4095 /* Maximum lcn number */
- #define MAX_FT1_RETRY 100
- #ifdef LINUX_2_4
- #ifndef AF_WANPIPE
- #define AF_WANPIPE 25
- #ifndef PF_WANPIPE
- #define PF_WANPIPE AF_WANPIPE
- #endif
- #endif
- #else
- #ifndef AF_WANPIPE
- #define AF_WANPIPE 24
- #ifndef PF_WANPIPE
- #define PF_WANPIPE AF_WANPIPE
- #endif
- #endif
- #endif
- #define TX_TIMEOUT 5*HZ
- /* General Critical Flags */
- #define SEND_CRIT 0x00
- #define PERI_CRIT 0x01
- /* Chdlc and PPP polling critical flag */
- #define POLL_CRIT 0x03
- /* Frame Relay Tx IRQ send critical flag */
- #define SEND_TXIRQ_CRIT 0x02
- /* Frame Relay ARP critical flag */
- #define ARP_CRIT 0x03
- /* Bit maps for dynamic interface configuration
- * DYN_OPT_ON : turns this option on/off
- * DEV_DOWN : device was shutdown by the driver not
- * by user
- */
- #define DYN_OPT_ON 0x00
- #define DEV_DOWN 0x01
- /*
- * Data structures for IOCTL calls.
- */
- typedef struct sdla_dump /* WANPIPE_DUMP */
- {
- unsigned long magic; /* for verification */
- unsigned long offset; /* absolute adapter memory address */
- unsigned long length; /* block length */
- void* ptr; /* -> buffer */
- } sdla_dump_t;
- typedef struct sdla_exec /* WANPIPE_EXEC */
- {
- unsigned long magic; /* for verification */
- void* cmd; /* -> command structure */
- void* data; /* -> data buffer */
- } sdla_exec_t;
- /* UDP management stuff */
- typedef struct wum_header
- {
- unsigned char signature[8]; /* 00h: signature */
- unsigned char type; /* 08h: request/reply */
- unsigned char command; /* 09h: commnand */
- unsigned char reserved[6]; /* 0Ah: reserved */
- } wum_header_t;
- /*************************************************************************
- Data Structure for global statistics
- *************************************************************************/
- typedef struct global_stats
- {
- unsigned long isr_entry;
- unsigned long isr_already_critical;
- unsigned long isr_rx;
- unsigned long isr_tx;
- unsigned long isr_intr_test;
- unsigned long isr_spurious;
- unsigned long isr_enable_tx_int;
- unsigned long rx_intr_corrupt_rx_bfr;
- unsigned long rx_intr_on_orphaned_DLCI;
- unsigned long rx_intr_dev_not_started;
- unsigned long tx_intr_dev_not_started;
- unsigned long poll_entry;
- unsigned long poll_already_critical;
- unsigned long poll_processed;
- unsigned long poll_tbusy_bad_status;
- unsigned long poll_host_disable_irq;
- unsigned long poll_host_enable_irq;
- } global_stats_t;
- typedef struct{
- unsigned short udp_src_port PACKED;
- unsigned short udp_dst_port PACKED;
- unsigned short udp_length PACKED;
- unsigned short udp_checksum PACKED;
- } udp_pkt_t;
- typedef struct {
- unsigned char ver_inet_hdr_length PACKED;
- unsigned char service_type PACKED;
- unsigned short total_length PACKED;
- unsigned short identifier PACKED;
- unsigned short flags_frag_offset PACKED;
- unsigned char ttl PACKED;
- unsigned char protocol PACKED;
- unsigned short hdr_checksum PACKED;
- unsigned long ip_src_address PACKED;
- unsigned long ip_dst_address PACKED;
- } ip_pkt_t;
- typedef struct {
- unsigned char signature[8] PACKED;
- unsigned char request_reply PACKED;
- unsigned char id PACKED;
- unsigned char reserved[6] PACKED;
- } wp_mgmt_t;
- /*************************************************************************
- Data Structure for if_send statistics
- *************************************************************************/
- typedef struct if_send_stat{
- unsigned long if_send_entry;
- unsigned long if_send_skb_null;
- unsigned long if_send_broadcast;
- unsigned long if_send_multicast;
- unsigned long if_send_critical_ISR;
- unsigned long if_send_critical_non_ISR;
- unsigned long if_send_tbusy;
- unsigned long if_send_tbusy_timeout;
- unsigned long if_send_PIPE_request;
- unsigned long if_send_wan_disconnected;
- unsigned long if_send_dlci_disconnected;
- unsigned long if_send_no_bfrs;
- unsigned long if_send_adptr_bfrs_full;
- unsigned long if_send_bfr_passed_to_adptr;
- unsigned long if_send_protocol_error;
- unsigned long if_send_bfr_not_passed_to_adptr;
- unsigned long if_send_tx_int_enabled;
- unsigned long if_send_consec_send_fail;
- } if_send_stat_t;
- typedef struct rx_intr_stat{
- unsigned long rx_intr_no_socket;
- unsigned long rx_intr_dev_not_started;
- unsigned long rx_intr_PIPE_request;
- unsigned long rx_intr_bfr_not_passed_to_stack;
- unsigned long rx_intr_bfr_passed_to_stack;
- } rx_intr_stat_t;
- typedef struct pipe_mgmt_stat{
- unsigned long UDP_PIPE_mgmt_kmalloc_err;
- unsigned long UDP_PIPE_mgmt_direction_err;
- unsigned long UDP_PIPE_mgmt_adptr_type_err;
- unsigned long UDP_PIPE_mgmt_adptr_cmnd_OK;
- unsigned long UDP_PIPE_mgmt_adptr_cmnd_timeout;
- unsigned long UDP_PIPE_mgmt_adptr_send_passed;
- unsigned long UDP_PIPE_mgmt_adptr_send_failed;
- unsigned long UDP_PIPE_mgmt_not_passed_to_stack;
- unsigned long UDP_PIPE_mgmt_passed_to_stack;
- unsigned long UDP_PIPE_mgmt_no_socket;
- unsigned long UDP_PIPE_mgmt_passed_to_adptr;
- } pipe_mgmt_stat_t;
- typedef struct {
- struct sk_buff *skb;
- } bh_data_t, cmd_data_t;
- #define MAX_LGTH_UDP_MGNT_PKT 2000
-
- /* This is used for interrupt testing */
- #define INTR_TEST_MODE 0x02
- #define WUM_SIGNATURE_L 0x50495046
- #define WUM_SIGNATURE_H 0x444E3845
- #define WUM_KILL 0x50
- #define WUM_EXEC 0x51
- #define WANPIPE 0x00
- #define API 0x01
- #define BRIDGE 0x02
- #define BRIDGE_NODE 0x03
- #ifdef __KERNEL__
- /****** Kernel Interface ****************************************************/
- #include <linux/sdladrv.h> /* SDLA support module API definitions */
- #include <linux/sdlasfm.h> /* SDLA firmware module definitions */
- #include <linux/tqueue.h>
- #ifdef LINUX_2_4
- #include <linux/serial.h>
- #include <linux/serialP.h>
- #include <linux/serial_reg.h>
- #include <asm/serial.h>
- #endif
- #include <linux/tty.h>
- #include <linux/tty_driver.h>
- #include <linux/tty_flip.h>
- #define is_digit(ch) (((ch)>=(unsigned)'0'&&(ch)<=(unsigned)'9')?1:0)
- #define is_alpha(ch) ((((ch)>=(unsigned)'a'&&(ch)<=(unsigned)'z')||
- ((ch)>=(unsigned)'A'&&(ch)<=(unsigned)'Z'))?1:0)
- #define is_hex_digit(ch) ((((ch)>=(unsigned)'0'&&(ch)<=(unsigned)'9')||
- ((ch)>=(unsigned)'a'&&(ch)<=(unsigned)'f')||
- ((ch)>=(unsigned)'A'&&(ch)<=(unsigned)'F'))?1:0)
- /****** Data Structures *****************************************************/
- /* Adapter Data Space.
- * This structure is needed because we handle multiple cards, otherwise
- * static data would do it.
- */
- typedef struct sdla
- {
- char devname[WAN_DRVNAME_SZ+1]; /* card name */
- sdlahw_t hw; /* hardware configuration */
- wan_device_t wandev; /* WAN device data space */
-
- unsigned open_cnt; /* number of open interfaces */
- unsigned long state_tick; /* link state timestamp */
- unsigned intr_mode; /* Type of Interrupt Mode */
- char in_isr; /* interrupt-in-service flag */
- char buff_int_mode_unbusy; /* flag for carrying out dev_tint */
- char dlci_int_mode_unbusy; /* flag for carrying out dev_tint */
- char configured; /* flag for previous configurations */
-
- unsigned short irq_dis_if_send_count; /* Disabling irqs in if_send*/
- unsigned short irq_dis_poll_count; /* Disabling irqs in poll routine*/
- unsigned short force_enable_irq;
- char TracingEnabled; /* flag for enabling trace */
- global_stats_t statistics; /* global statistics */
- void* mbox; /* -> mailbox */
- void* rxmb; /* -> receive mailbox */
- void* flags; /* -> adapter status flags */
- void (*isr)(struct sdla* card); /* interrupt service routine */
- void (*poll)(struct sdla* card); /* polling routine */
- int (*exec)(struct sdla* card, void* u_cmd, void* u_data);
- /* Used by the listen() system call */
- /* Wanpipe Socket Interface */
- int (*func) (struct sk_buff *, struct sock *);
- struct sock *sk;
- /* Shutdown function */
- void (*disable_comm) (struct sdla *card);
- /* Secondary Port Device: Piggibacking */
- struct sdla *next;
- /* TTY driver variables */
- unsigned char tty_opt;
- struct tty_struct *tty;
- unsigned int tty_minor;
- unsigned int tty_open;
- unsigned char *tty_buf;
- unsigned char *tty_rx;
- struct tq_struct tty_task_queue;
-
- union
- {
- struct
- { /****** X.25 specific data **********/
- u32 lo_pvc;
- u32 hi_pvc;
- u32 lo_svc;
- u32 hi_svc;
- netdevice_t *svc_to_dev_map[MAX_X25_LCN];
- netdevice_t *pvc_to_dev_map[MAX_X25_LCN];
- netdevice_t *tx_dev;
- netdevice_t *cmd_dev;
- u32 no_dev;
- volatile u8 *hdlc_buf_status;
- u32 tx_interrupts_pending;
- u16 timer_int_enabled;
- netdevice_t *poll_device;
- atomic_t command_busy;
- u16 udp_pkt_lgth;
- u32 udp_type;
- u8 udp_pkt_src;
- u32 udp_lcn;
- netdevice_t * udp_dev;
- s8 udp_pkt_data[MAX_LGTH_UDP_MGNT_PKT];
- u8 LAPB_hdlc; /* Option to turn off X25 and run only LAPB */
- u8 logging; /* Option to log call messages */
- u8 oob_on_modem; /* Option to send modem status to the api */
- u16 num_of_ch; /* Number of channels configured by the user */
- struct tq_struct x25_poll_task;
- struct timer_list x25_timer;
- } x;
- struct
- { /****** frame relay specific data ***/
- void* rxmb_base; /* -> first Rx buffer */
- void* rxmb_last; /* -> last Rx buffer */
- unsigned rx_base; /* S508 receive buffer base */
- unsigned rx_top; /* S508 receive buffer end */
- unsigned short node_dlci[100];
- unsigned short dlci_num;
- netdevice_t *dlci_to_dev_map[991 + 1];
- unsigned tx_interrupts_pending;
- unsigned short timer_int_enabled;
- unsigned short udp_pkt_lgth;
- int udp_type;
- char udp_pkt_src;
- unsigned udp_dlci;
- char udp_pkt_data[MAX_LGTH_UDP_MGNT_PKT];
- void* trc_el_base; /* first trace element */
- void* trc_el_last; /* last trace element */
- void *curr_trc_el; /* current trace element */
- unsigned short trc_bfr_space; /* trace buffer space */
- unsigned char update_comms_stats;
- netdevice_t *arp_dev;
- spinlock_t if_send_lock;
- } f;
- struct /****** PPP-specific data ***********/
- {
- char if_name[WAN_IFNAME_SZ+1]; /* interface name */
- void* txbuf; /* -> current Tx buffer */
- void* txbuf_base; /* -> first Tx buffer */
- void* txbuf_last; /* -> last Tx buffer */
- void* rxbuf_base; /* -> first Rx buffer */
- void* rxbuf_last; /* -> last Rx buffer */
- unsigned rx_base; /* S508 receive buffer base */
- unsigned rx_top; /* S508 receive buffer end */
- char ip_mode; /* STATIC/HOST/PEER IP Mode */
- char authenticator; /* Authenticator for PAP/CHAP */
- unsigned char comm_enabled; /* Is comm enabled or not */
- unsigned char peer_route; /* Process Peer Route */
- unsigned long *txbuf_next; /* Next Tx buffer to use */
- unsigned long *rxbuf_next; /* Next Rx buffer to use */
- } p;
- struct /* Cisco HDLC-specific data */
- {
- char if_name[WAN_IFNAME_SZ+1]; /* interface name */
- unsigned char comm_port;/* Communication Port O or 1 */
- unsigned char usedby; /* Used by WANPIPE or API */
- void* rxmb; /* Receive mail box */
- void* flags; /* flags */
- void* tx_status; /* Tx status element */
- void* rx_status; /* Rx status element */
- void* txbuf; /* -> current Tx buffer */
- void* txbuf_base; /* -> first Tx buffer */
- void* txbuf_last; /* -> last Tx buffer */
- void* rxbuf_base; /* -> first Rx buffer */
- void* rxbuf_last; /* -> last Rx buffer */
- unsigned rx_base; /* S508 receive buffer base */
- unsigned rx_top; /* S508 receive buffer end */
- unsigned char receive_only; /* high speed receivers */
- unsigned short protocol_options;
- unsigned short kpalv_tx; /* Tx kpalv timer */
- unsigned short kpalv_rx; /* Rx kpalv timer */
- unsigned short kpalv_err; /* Error tolerance */
- unsigned short slarp_timer; /* SLARP req timer */
- unsigned state; /* state of the link */
- unsigned char api_status;
- unsigned char update_call_count;
- unsigned short api_options; /* for async config */
- unsigned char async_mode;
- unsigned short tx_bits_per_char;
- unsigned short rx_bits_per_char;
- unsigned short stop_bits;
- unsigned short parity;
- unsigned short break_timer;
- unsigned short inter_char_timer;
- unsigned short rx_complete_length;
- unsigned short xon_char;
- unsigned short xoff_char;
- unsigned char comm_enabled; /* Is comm enabled or not */
- unsigned char backup;
- } c;
- struct
- {
- void* tx_status; /* Tx status element */
- void* rx_status; /* Rx status element */
- void* trace_status; /* Trace status element */
- void* txbuf; /* -> current Tx buffer */
- void* txbuf_base; /* -> first Tx buffer */
- void* txbuf_last; /* -> last Tx buffer */
- void* rxbuf_base; /* -> first Rx buffer */
- void* rxbuf_last; /* -> last Rx buffer */
- void* tracebuf; /* -> current Trace buffer */
- void* tracebuf_base; /* -> current Trace buffer */
- void* tracebuf_last; /* -> current Trace buffer */
- unsigned rx_base; /* receive buffer base */
- unsigned rx_end; /* receive buffer end */
- unsigned trace_base; /* trace buffer base */
- unsigned trace_end; /* trace buffer end */
- } h;
- } u;
- } sdla_t;
- /****** Public Functions ****************************************************/
- void wanpipe_open (sdla_t* card); /* wpmain.c */
- void wanpipe_close (sdla_t* card); /* wpmain.c */
- void wanpipe_set_state (sdla_t* card, int state); /* wpmain.c */
- int wpx_init (sdla_t* card, wandev_conf_t* conf); /* wpx.c */
- int wpf_init (sdla_t* card, wandev_conf_t* conf); /* wpf.c */
- int wpp_init (sdla_t* card, wandev_conf_t* conf); /* wpp.c */
- int wpc_init (sdla_t* card, wandev_conf_t* conf); /* Cisco HDLC */
- int bsc_init (sdla_t* card, wandev_conf_t* conf); /* BSC streaming */
- int hdlc_init(sdla_t* card, wandev_conf_t* conf); /* HDLC support */
- int wpft1_init (sdla_t* card, wandev_conf_t* conf); /* FT1 Config support */
- int wsppp_init (sdla_t* card, wandev_conf_t* conf); /* Sync PPP on top of RAW CHDLC */
- extern sdla_t * wanpipe_find_card(char *);
- extern sdla_t * wanpipe_find_card_num (int);
- extern void wanpipe_queue_tq (struct tq_struct *);
- extern void wanpipe_mark_bh (void);
- extern void wakeup_sk_bh (netdevice_t *);
- extern int change_dev_flags (netdevice_t *, unsigned);
- extern unsigned long get_ip_address (netdevice_t *dev, int option);
- extern void add_gateway(sdla_t *, netdevice_t *);
- #endif /* __KERNEL__ */
- #endif /* _WANPIPE_H */