#include <linux/bitops.h>
#include <linux/compiler.h>
#include <linux/completion.h>
#include <linux/console.h>
#include <linux/delay.h>
#include <linux/firmware.h>
#include <linux/init.h>
#include <linux/io.h>
#include <linux/ioport.h>
#include <linux/irq.h>
#include <linux/kernel.h>
#include <linux/log2.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/serial.h>
#include <linux/serial_core.h>
#include <linux/slab.h>
#include <linux/sysrq.h>
#include <linux/tty.h>
#include <linux/tty_flip.h>
#include <linux/types.h>
#define DRV_NAME …
#define RP2_FW_NAME …
#define RP2_UCODE_BYTES …
#define PORTS_PER_ASIC …
#define ALL_PORTS_MASK …
#define UART_CLOCK …
#define DEFAULT_BAUD_DIV …
#define FIFO_SIZE …
#define RP2_FPGA_CTL0 …
#define RP2_FPGA_CTL1 …
#define RP2_IRQ_MASK …
#define RP2_IRQ_MASK_EN_m …
#define RP2_IRQ_STATUS …
#define RP2_ASIC_SPACING …
#define RP2_ASIC_OFFSET(i) …
#define RP2_PORT_BASE …
#define RP2_PORT_SPACING …
#define RP2_UCODE_BASE …
#define RP2_UCODE_SPACING …
#define RP2_CLK_PRESCALER …
#define RP2_CH_IRQ_STAT …
#define RP2_CH_IRQ_MASK …
#define RP2_ASIC_IRQ …
#define RP2_ASIC_IRQ_EN_m …
#define RP2_GLOBAL_CMD …
#define RP2_ASIC_CFG …
#define RP2_DATA_DWORD …
#define RP2_DATA_BYTE …
#define RP2_DATA_BYTE_ERR_PARITY_m …
#define RP2_DATA_BYTE_ERR_OVERRUN_m …
#define RP2_DATA_BYTE_ERR_FRAMING_m …
#define RP2_DATA_BYTE_BREAK_m …
#define RP2_DUMMY_READ …
#define RP2_DATA_BYTE_EXCEPTION_MASK …
#define RP2_RX_FIFO_COUNT …
#define RP2_TX_FIFO_COUNT …
#define RP2_CHAN_STAT …
#define RP2_CHAN_STAT_RXDATA_m …
#define RP2_CHAN_STAT_DCD_m …
#define RP2_CHAN_STAT_DSR_m …
#define RP2_CHAN_STAT_CTS_m …
#define RP2_CHAN_STAT_RI_m …
#define RP2_CHAN_STAT_OVERRUN_m …
#define RP2_CHAN_STAT_DSR_CHANGED_m …
#define RP2_CHAN_STAT_CTS_CHANGED_m …
#define RP2_CHAN_STAT_CD_CHANGED_m …
#define RP2_CHAN_STAT_RI_CHANGED_m …
#define RP2_CHAN_STAT_TXEMPTY_m …
#define RP2_CHAN_STAT_MS_CHANGED_MASK …
#define RP2_TXRX_CTL …
#define RP2_TXRX_CTL_MSRIRQ_m …
#define RP2_TXRX_CTL_RXIRQ_m …
#define RP2_TXRX_CTL_RX_TRIG_s …
#define RP2_TXRX_CTL_RX_TRIG_m …
#define RP2_TXRX_CTL_RX_TRIG_1 …
#define RP2_TXRX_CTL_RX_TRIG_256 …
#define RP2_TXRX_CTL_RX_TRIG_448 …
#define RP2_TXRX_CTL_RX_EN_m …
#define RP2_TXRX_CTL_RTSFLOW_m …
#define RP2_TXRX_CTL_DTRFLOW_m …
#define RP2_TXRX_CTL_TX_TRIG_s …
#define RP2_TXRX_CTL_TX_TRIG_m …
#define RP2_TXRX_CTL_DSRFLOW_m …
#define RP2_TXRX_CTL_TXIRQ_m …
#define RP2_TXRX_CTL_CTSFLOW_m …
#define RP2_TXRX_CTL_TX_EN_m …
#define RP2_TXRX_CTL_RTS_m …
#define RP2_TXRX_CTL_DTR_m …
#define RP2_TXRX_CTL_LOOP_m …
#define RP2_TXRX_CTL_BREAK_m …
#define RP2_TXRX_CTL_CMSPAR_m …
#define RP2_TXRX_CTL_nPARODD_m …
#define RP2_TXRX_CTL_PARENB_m …
#define RP2_UART_CTL …
#define RP2_UART_CTL_MODE_s …
#define RP2_UART_CTL_MODE_m …
#define RP2_UART_CTL_MODE_rs232 …
#define RP2_UART_CTL_FLUSH_RX_m …
#define RP2_UART_CTL_FLUSH_TX_m …
#define RP2_UART_CTL_RESET_CH_m …
#define RP2_UART_CTL_XMIT_EN_m …
#define RP2_UART_CTL_DATABITS_s …
#define RP2_UART_CTL_DATABITS_m …
#define RP2_UART_CTL_DATABITS_8 …
#define RP2_UART_CTL_DATABITS_7 …
#define RP2_UART_CTL_DATABITS_6 …
#define RP2_UART_CTL_DATABITS_5 …
#define RP2_UART_CTL_STOPBITS_m …
#define RP2_BAUD …
#define RP2_TX_SWFLOW …
#define RP2_TX_SWFLOW_ena …
#define RP2_TX_SWFLOW_dis …
#define RP2_RX_SWFLOW …
#define RP2_RX_SWFLOW_ena …
#define RP2_RX_SWFLOW_dis …
#define RP2_RX_FIFO …
#define RP2_RX_FIFO_ena …
#define RP2_RX_FIFO_dis …
static struct uart_driver rp2_uart_driver = …;
struct rp2_card;
struct rp2_uart_port { … };
struct rp2_card { … };
#define RP_ID(prod) …
#define RP_CAP(ports, smpte) …
static inline void rp2_decode_cap(const struct pci_device_id *id,
int *ports, int *smpte)
{ … }
static DEFINE_SPINLOCK(rp2_minor_lock);
static int rp2_minor_next;
static int rp2_alloc_ports(int n_ports)
{ … }
static inline struct rp2_uart_port *port_to_up(struct uart_port *port)
{ … }
static void rp2_rmw(struct rp2_uart_port *up, int reg,
u32 clr_bits, u32 set_bits)
{ … }
static void rp2_rmw_clr(struct rp2_uart_port *up, int reg, u32 val)
{ … }
static void rp2_rmw_set(struct rp2_uart_port *up, int reg, u32 val)
{ … }
static void rp2_mask_ch_irq(struct rp2_uart_port *up, int ch_num,
int is_enabled)
{ … }
static unsigned int rp2_uart_tx_empty(struct uart_port *port)
{ … }
static unsigned int rp2_uart_get_mctrl(struct uart_port *port)
{ … }
static void rp2_uart_set_mctrl(struct uart_port *port, unsigned int mctrl)
{ … }
static void rp2_uart_start_tx(struct uart_port *port)
{ … }
static void rp2_uart_stop_tx(struct uart_port *port)
{ … }
static void rp2_uart_stop_rx(struct uart_port *port)
{ … }
static void rp2_uart_break_ctl(struct uart_port *port, int break_state)
{ … }
static void rp2_uart_enable_ms(struct uart_port *port)
{ … }
static void __rp2_uart_set_termios(struct rp2_uart_port *up,
unsigned long cfl,
unsigned long ifl,
unsigned int baud_div)
{ … }
static void rp2_uart_set_termios(struct uart_port *port, struct ktermios *new,
const struct ktermios *old)
{ … }
static void rp2_rx_chars(struct rp2_uart_port *up)
{ … }
static void rp2_tx_chars(struct rp2_uart_port *up)
{ … }
static void rp2_ch_interrupt(struct rp2_uart_port *up)
{ … }
static int rp2_asic_interrupt(struct rp2_card *card, unsigned int asic_id)
{ … }
static irqreturn_t rp2_uart_interrupt(int irq, void *dev_id)
{ … }
static inline void rp2_flush_fifos(struct rp2_uart_port *up)
{ … }
static int rp2_uart_startup(struct uart_port *port)
{ … }
static void rp2_uart_shutdown(struct uart_port *port)
{ … }
static const char *rp2_uart_type(struct uart_port *port)
{ … }
static void rp2_uart_release_port(struct uart_port *port)
{ … }
static int rp2_uart_request_port(struct uart_port *port)
{ … }
static void rp2_uart_config_port(struct uart_port *port, int flags)
{ … }
static int rp2_uart_verify_port(struct uart_port *port,
struct serial_struct *ser)
{ … }
static const struct uart_ops rp2_uart_ops = …;
static void rp2_reset_asic(struct rp2_card *card, unsigned int asic_id)
{ … }
static void rp2_init_card(struct rp2_card *card)
{ … }
static void rp2_init_port(struct rp2_uart_port *up, const struct firmware *fw)
{ … }
static void rp2_remove_ports(struct rp2_card *card)
{ … }
static int rp2_load_firmware(struct rp2_card *card, const struct firmware *fw)
{ … }
static int rp2_probe(struct pci_dev *pdev,
const struct pci_device_id *id)
{ … }
static void rp2_remove(struct pci_dev *pdev)
{ … }
static const struct pci_device_id rp2_pci_tbl[] = …;
MODULE_DEVICE_TABLE(pci, rp2_pci_tbl);
static struct pci_driver rp2_pci_driver = …;
static int __init rp2_uart_init(void)
{ … }
static void __exit rp2_uart_exit(void)
{ … }
module_init(…) …;
module_exit(rp2_uart_exit);
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;
MODULE_FIRMWARE(…);