#define pr_fmt(fmt) …
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/version.h>
#include <linux/pci.h>
#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/if.h>
#include <linux/hdlc.h>
#include <asm/io.h>
#include <linux/uaccess.h>
#include "farsync.h"
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;
#define FST_MAX_PORTS …
#define FST_MAX_CARDS …
#define FST_TX_QUEUE_LEN …
#define FST_TXQ_DEPTH …
#define FST_HIGH_WATER_MARK …
#define FST_LOW_WATER_MARK …
#define FST_MAX_MTU …
#define FST_DEF_MTU …
#define FST_TX_TIMEOUT …
#ifdef ARPHRD_RAWHDLC
#define ARPHRD_MYTYPE …
#else
#define ARPHRD_MYTYPE …
#endif
static int fst_txq_low = …;
static int fst_txq_high = …;
static int fst_max_reads = …;
static int fst_excluded_cards;
static int fst_excluded_list[FST_MAX_CARDS];
module_param(fst_txq_low, int, 0);
module_param(fst_txq_high, int, 0);
module_param(fst_max_reads, int, 0);
module_param(fst_excluded_cards, int, 0);
module_param_array(…);
#pragma pack(1)
#define SMC_VERSION …
#define FST_MEMSIZE …
#define SMC_BASE …
#define BFM_BASE …
#define LEN_TX_BUFFER …
#define LEN_RX_BUFFER …
#define LEN_SMALL_TX_BUFFER …
#define LEN_SMALL_RX_BUFFER …
#define NUM_TX_BUFFER …
#define NUM_RX_BUFFER …
#define INT_RETRY_TIME …
struct txdesc { … };
struct rxdesc { … };
#define cnv_bcnt(len) …
#define DMA_OWN …
#define TX_STP …
#define TX_ENP …
#define RX_ERR …
#define RX_FRAM …
#define RX_OFLO …
#define RX_CRC …
#define RX_HBUF …
#define RX_STP …
#define RX_ENP …
#define MAX_CIRBUFF …
struct cirbuff { … };
#define CTLA_CHG …
#define CTLB_CHG …
#define CTLC_CHG …
#define CTLD_CHG …
#define INIT_CPLT …
#define INIT_FAIL …
#define ABTA_SENT …
#define ABTB_SENT …
#define ABTC_SENT …
#define ABTD_SENT …
#define TXA_UNDF …
#define TXB_UNDF …
#define TXC_UNDF …
#define TXD_UNDF …
#define F56_INT …
#define M32_INT …
#define TE1_ALMA …
struct port_cfg { … };
struct su_config { … };
struct su_status { … };
struct fst_shared { … };
#define END_SIG …
#define NOP …
#define ACK …
#define NAK …
#define STARTPORT …
#define STOPPORT …
#define ABORTTX …
#define SETV24O …
#define CNTRL_9052 …
#define CNTRL_9054 …
#define INTCSR_9052 …
#define INTCSR_9054 …
#define DMAMODE0 …
#define DMAPADR0 …
#define DMALADR0 …
#define DMASIZ0 …
#define DMADPR0 …
#define DMAMODE1 …
#define DMAPADR1 …
#define DMALADR1 …
#define DMASIZ1 …
#define DMADPR1 …
#define DMACSR0 …
#define DMACSR1 …
#define DMAARB …
#define DMATHR …
#define DMADAC0 …
#define DMADAC1 …
#define DMAMARBR …
#define FST_MIN_DMA_LEN …
#define FST_RX_DMA_INT …
#define FST_TX_DMA_INT …
#define FST_CARD_INT …
struct buf_window { … };
#define BUF_OFFSET(X) …
#pragma pack()
struct fst_port_info { … };
struct fst_card_info { … };
#define dev_to_port(D) …
#define port_to_dev(P) …
#define WIN_OFFSET(X) …
#define FST_RDB(C, E) …
#define FST_RDW(C, E) …
#define FST_RDL(C, E) …
#define FST_WRB(C, E, B) …
#define FST_WRW(C, E, W) …
#define FST_WRL(C, E, L) …
#if FST_DEBUG
static int fst_debug_mask = { FST_DEBUG };
#define dbg …
#else
#define dbg(F, fmt, args...) …
#endif
static const struct pci_device_id fst_pci_dev_id[] = …;
MODULE_DEVICE_TABLE(pci, fst_pci_dev_id);
static void do_bottom_half_tx(struct fst_card_info *card);
static void do_bottom_half_rx(struct fst_card_info *card);
static void fst_process_tx_work_q(struct tasklet_struct *unused);
static void fst_process_int_work_q(struct tasklet_struct *unused);
static DECLARE_TASKLET(fst_tx_task, fst_process_tx_work_q);
static DECLARE_TASKLET(fst_int_task, fst_process_int_work_q);
static struct fst_card_info *fst_card_array[FST_MAX_CARDS];
static DEFINE_SPINLOCK(fst_work_q_lock);
static u64 fst_work_txq;
static u64 fst_work_intq;
static void
fst_q_work_item(u64 *queue, int card_index)
{ … }
static void
fst_process_tx_work_q(struct tasklet_struct *unused)
{ … }
static void
fst_process_int_work_q(struct tasklet_struct *unused)
{ … }
static inline void
fst_cpureset(struct fst_card_info *card)
{ … }
static inline void
fst_cpurelease(struct fst_card_info *card)
{ … }
static inline void
fst_clear_intr(struct fst_card_info *card)
{ … }
static inline void
fst_enable_intr(struct fst_card_info *card)
{ … }
static inline void
fst_disable_intr(struct fst_card_info *card)
{ … }
static void
fst_process_rx_status(int rx_status, char *name)
{ … }
static inline void
fst_init_dma(struct fst_card_info *card)
{ … }
static void
fst_tx_dma_complete(struct fst_card_info *card, struct fst_port_info *port,
int len, int txpos)
{ … }
static __be16 farsync_type_trans(struct sk_buff *skb, struct net_device *dev)
{ … }
static void
fst_rx_dma_complete(struct fst_card_info *card, struct fst_port_info *port,
int len, struct sk_buff *skb, int rxp)
{ … }
static inline void
fst_rx_dma(struct fst_card_info *card, dma_addr_t dma, u32 mem, int len)
{ … }
static inline void
fst_tx_dma(struct fst_card_info *card, dma_addr_t dma, u32 mem, int len)
{ … }
static void
fst_issue_cmd(struct fst_port_info *port, unsigned short cmd)
{ … }
static inline void
fst_op_raise(struct fst_port_info *port, unsigned int outputs)
{ … }
static inline void
fst_op_lower(struct fst_port_info *port, unsigned int outputs)
{ … }
static void
fst_rx_config(struct fst_port_info *port)
{ … }
static void
fst_tx_config(struct fst_port_info *port)
{ … }
static void
fst_intr_te1_alarm(struct fst_card_info *card, struct fst_port_info *port)
{ … }
static void
fst_intr_ctlchg(struct fst_card_info *card, struct fst_port_info *port)
{ … }
static void
fst_log_rx_error(struct fst_card_info *card, struct fst_port_info *port,
unsigned char dmabits, int rxp, unsigned short len)
{ … }
static void
fst_recover_rx_error(struct fst_card_info *card, struct fst_port_info *port,
unsigned char dmabits, int rxp, unsigned short len)
{ … }
static void
fst_intr_rx(struct fst_card_info *card, struct fst_port_info *port)
{ … }
static void
do_bottom_half_tx(struct fst_card_info *card)
{ … }
static void
do_bottom_half_rx(struct fst_card_info *card)
{ … }
static irqreturn_t
fst_intr(int dummy, void *dev_id)
{ … }
static void
check_started_ok(struct fst_card_info *card)
{ … }
static int
set_conf_from_info(struct fst_card_info *card, struct fst_port_info *port,
struct fstioc_info *info)
{ … }
static void
gather_conf_info(struct fst_card_info *card, struct fst_port_info *port,
struct fstioc_info *info)
{ … }
static int
fst_set_iface(struct fst_card_info *card, struct fst_port_info *port,
struct if_settings *ifs)
{ … }
static int
fst_get_iface(struct fst_card_info *card, struct fst_port_info *port,
struct if_settings *ifs)
{ … }
static int
fst_siocdevprivate(struct net_device *dev, struct ifreq *ifr, void __user *data, int cmd)
{ … }
static int
fst_ioctl(struct net_device *dev, struct if_settings *ifs)
{ … }
static void
fst_openport(struct fst_port_info *port)
{ … }
static void
fst_closeport(struct fst_port_info *port)
{ … }
static int
fst_open(struct net_device *dev)
{ … }
static int
fst_close(struct net_device *dev)
{ … }
static int
fst_attach(struct net_device *dev, unsigned short encoding, unsigned short parity)
{ … }
static void
fst_tx_timeout(struct net_device *dev, unsigned int txqueue)
{ … }
static netdev_tx_t
fst_start_xmit(struct sk_buff *skb, struct net_device *dev)
{ … }
static char *type_strings[] = …;
static int
fst_init_card(struct fst_card_info *card)
{ … }
static const struct net_device_ops fst_ops = …;
static int
fst_add_one(struct pci_dev *pdev, const struct pci_device_id *ent)
{ … }
static void
fst_remove_one(struct pci_dev *pdev)
{ … }
static struct pci_driver fst_driver = …;
static int __init
fst_init(void)
{ … }
static void __exit
fst_cleanup_module(void)
{ … }
module_init(…) …;
module_exit(fst_cleanup_module);