/* * General definitions for the COMX driver * * Original authors: Arpad Bakay , * Peter Bajan , * Previous maintainer: Tivadar Szemethy * Currently maintained by: Gergely Madarasz * * Copyright (C) 1995-1999 ITConsult-Pro Co. * * 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. * * * net_device_stats: * rx_length_errors rec_len < 4 || rec_len > 2000 * rx_over_errors receive overrun (OVR) * rx_crc_errors rx crc error * rx_frame_errors aborts rec'd (ABO) * rx_fifo_errors status fifo overrun (PBUFOVR) * rx_missed_errors receive buffer overrun (BUFOVR) * tx_aborted_errors ? * tx_carrier_errors modem line status changes * tx_fifo_errors tx underrun (locomx) */ #include struct comx_protocol { char *name; char *version; unsigned short encap_type; int (*line_init)(struct net_device *dev); int (*line_exit)(struct net_device *dev); struct comx_protocol *next; }; struct comx_hardware { char *name; char *version; int (*hw_init)(struct net_device *dev); int (*hw_exit)(struct net_device *dev); int (*hw_dump)(struct net_device *dev); struct comx_hardware *next; }; struct comx_channel { void *if_ptr; // General purpose pointer struct net_device *dev; // Where we belong to struct net_device *twin; // On dual-port cards struct proc_dir_entry *procdir; // the directory unsigned char init_status; unsigned char line_status; struct timer_list lineup_timer; // against line jitter long int lineup_pending; unsigned char lineup_delay; #if 0 struct timer_list reset_timer; // for board resetting long reset_pending; int reset_timeout; #endif struct net_device_stats stats; struct net_device_stats *current_stats; #if 0 unsigned long board_resets; #endif unsigned long *avg_bytes; int loadavg_counter, loadavg_size; int loadavg[3]; struct timer_list loadavg_timer; int debug_flags; char *debug_area; int debug_start, debug_end, debug_size; struct proc_dir_entry *debug_file; #ifdef CONFIG_COMX_DEBUG_RAW char *raw; int raw_len; #endif // LINE specific struct comx_protocol *protocol; void (*LINE_rx)(struct net_device *dev, struct sk_buff *skb); int (*LINE_tx)(struct net_device *dev); void (*LINE_status)(struct net_device *dev, u_short status); int (*LINE_open)(struct net_device *dev); int (*LINE_close)(struct net_device *dev); int (*LINE_xmit)(struct sk_buff *skb, struct net_device *dev); int (*LINE_header)(struct sk_buff *skb, struct net_device *dev, u_short type,void *daddr, void *saddr, unsigned len); int (*LINE_rebuild_header)(struct sk_buff *skb); int (*LINE_statistics)(struct net_device *dev, char *page); int (*LINE_parameter_check)(struct net_device *dev); int (*LINE_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd); void (*LINE_mod_use)(int); void * LINE_privdata; // HW specific struct comx_hardware *hardware; void (*HW_board_on)(struct net_device *dev); void (*HW_board_off)(struct net_device *dev); struct net_device *(*HW_access_board)(struct net_device *dev); void (*HW_release_board)(struct net_device *dev, struct net_device *savep); int (*HW_txe)(struct net_device *dev); int (*HW_open)(struct net_device *dev); int (*HW_close)(struct net_device *dev); int (*HW_send_packet)(struct net_device *dev,struct sk_buff *skb); int (*HW_statistics)(struct net_device *dev, char *page); #if 0 int (*HW_reset)(struct net_device *dev, char *page); #endif int (*HW_load_board)(struct net_device *dev); void (*HW_set_clock)(struct net_device *dev); void *HW_privdata; }; struct comx_debugflags_struct { char *name; int value; }; #define COMX_ROOT_DIR_NAME "comx" #define FILENAME_HARDWARE "boardtype" #define FILENAME_HARDWARELIST "boardtypes" #define FILENAME_PROTOCOL "protocol" #define FILENAME_PROTOCOLLIST "protocols" #define FILENAME_DEBUG "debug" #define FILENAME_CLOCK "clock" #define FILENAME_STATUS "status" #define FILENAME_IO "io" #define FILENAME_IRQ "irq" #define FILENAME_KEEPALIVE "keepalive" #define FILENAME_LINEUPDELAY "lineup_delay" #define FILENAME_CHANNEL "channel" #define FILENAME_FIRMWARE "firmware" #define FILENAME_MEMADDR "memaddr" #define FILENAME_TWIN "twin" #define FILENAME_T1 "t1" #define FILENAME_T2 "t2" #define FILENAME_N2 "n2" #define FILENAME_WINDOW "window" #define FILENAME_MODE "mode" #define FILENAME_DLCI "dlci" #define FILENAME_MASTER "master" #ifdef CONFIG_COMX_DEBUG_RAW #define FILENAME_RAW "raw" #endif #define PROTONAME_NONE "none" #define HWNAME_NONE "none" #define KEEPALIVE_OFF "off" #define FRAME_ACCEPTED 0 /* sending and xmitter busy */ #define FRAME_DROPPED 1 #define FRAME_ERROR 2 /* xmitter error */ #define FRAME_QUEUED 3 /* sending but more can come */ #define LINE_UP 1 /* Modem UP */ #define PROTO_UP 2 #define PROTO_LOOP 4 #define HW_OPEN 1 #define LINE_OPEN 2 #define FW_LOADED 4 #define IRQ_ALLOCATED 8 #define DEBUG_COMX_RX 2 #define DEBUG_COMX_TX 4 #define DEBUG_HW_TX 16 #define DEBUG_HW_RX 32 #define DEBUG_HDLC_KEEPALIVE 64 #define DEBUG_COMX_PPP 128 #define DEBUG_COMX_LAPB 256 #define DEBUG_COMX_DLCI 512 #define DEBUG_PAGESIZE 3072 #define DEFAULT_DEBUG_SIZE 4096 #define DEFAULT_LINEUP_DELAY 1 #define FILE_PAGESIZE 3072 #ifndef COMX_PPP_MAJOR #define COMX_PPP_MAJOR 88 #endif #define COMX_CHANNEL(dev) ((struct comx_channel*)dev->priv) #define TWIN(dev) (COMX_CHANNEL(dev)->twin) #ifndef byte typedef u8 byte; #endif #ifndef word typedef u16 word; #endif #ifndef SEEK_SET #define SEEK_SET 0 #endif #ifndef SEEK_CUR #define SEEK_CUR 1 #endif #ifndef SEEK_END #define SEEK_END 2 #endif extern struct proc_dir_entry * comx_root_dir; extern int comx_register_hardware(struct comx_hardware *comx_hw); extern int comx_unregister_hardware(char *name); extern int comx_register_protocol(struct comx_protocol *comx_line); extern int comx_unregister_protocol(char *name); extern int comx_rx(struct net_device *dev, struct sk_buff *skb); extern void comx_status(struct net_device *dev, int status); extern void comx_lineup_func(unsigned long d); extern int comx_debug(struct net_device *dev, char *fmt, ...); extern int comx_debug_skb(struct net_device *dev, struct sk_buff *skb, char *msg); extern int comx_debug_bytes(struct net_device *dev, unsigned char *bytes, int len, char *msg); extern int comx_strcasecmp(const char *cs, const char *ct); extern struct inode_operations comx_normal_inode_ops;