Main Page | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

smc-ircc.c File Reference

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/skbuff.h>
#include <linux/netdevice.h>
#include <linux/ioport.h>
#include <linux/delay.h>
#include <linux/malloc.h>
#include <linux/init.h>
#include <linux/rtnetlink.h>
#include <linux/serial_reg.h>
#include <asm/io.h>
#include <asm/dma.h>
#include <asm/byteorder.h>
#include <net/irda/wrapper.h>
#include <net/irda/irda.h>
#include <net/irda/irmod.h>
#include <net/irda/irlap_frame.h>
#include <net/irda/irda_device.h>
#include <net/irda/smc-ircc.h>
#include <net/irda/irport.h>

Include dependency graph for smc-ircc.c:

Go to the source code of this file.

Defines

#define CHIP_IO_EXTENT   8

Functions

static int ircc_open (int i, unsigned int iobase, unsigned int board_addr)
static int ircc_probe (int iobase, int board_addr)
static int ircc_probe_58 (smc_chip_t *chip, chipio_t *info)
static int ircc_probe_69 (smc_chip_t *chip, chipio_t *info)
static int ircc_dma_receive (struct ircc_cb *self, int iobase)
static void ircc_dma_receive_complete (struct ircc_cb *self, int iobase)
static int ircc_hard_xmit (struct sk_buff *skb, struct device *dev)
static void ircc_dma_xmit (struct ircc_cb *self, int iobase, int bofs)
static void ircc_change_speed (void *priv, __u32 speed)
static void ircc_interrupt (int irq, void *dev_id, struct pt_regs *regs)
static int ircc_is_receiving (struct ircc_cb *self)
static int ircc_net_open (struct device *dev)
static int ircc_net_close (struct device *dev)
static void register_bank (int iobase, int bank)
int __init ircc_init (void)
static void ircc_dma_xmit_complete (struct ircc_cb *self, int iobase)

Variables

static char * driver_name = "smc-ircc"
static unsigned int io [] = { ~0, ~0 }
static unsigned int io2 [] = { 0, 0 }
static struct ircc_cbdev_self [] = { NULL, NULL}
static smc_chip_t chips []
static int ircc_irq = 255
static int ircc_dma = 255


Define Documentation

#define CHIP_IO_EXTENT   8
 

Definition at line 68 of file smc-ircc.c.


Function Documentation

static void ircc_change_speed void *  priv,
__u32  speed
[static]
 

Definition at line 490 of file smc-ircc.c.

References ASSERT, dev, device, fast, inb, IRCC_1152, IRCC_CFGA_IRDA_4PPM, IRCC_CFGA_IRDA_HDLC, IRCC_CFGA_IRDA_SIR_A, IRCC_CFGB_MUX_COM, IRCC_CFGB_MUX_IR, IRCC_CONTROL, IRCC_CRC, ircc_dma_receive(), IRCC_FIFO_THRESHOLD, ircc_hard_xmit(), IRCC_IER, IRCC_LCR_A, IRCC_LCR_A_FAST, IRCC_MASTER, IRCC_MASTER_INT_EN, IRCC_MASTER_RESET, IRCC_SCE_CFGA, IRCC_SCE_CFGB, IRDA_DEBUG, ircc_cb::irport, irport_change_speed(), irport_hard_xmit(), irport_start(), irport_stop(), NULL, outb, register_bank(), x00, x30, and x3f.

Referenced by ircc_dma_xmit_complete(), and ircc_open().

Here is the call graph for this function:

static int ircc_dma_receive struct ircc_cb self,
int  iobase
[static]
 

Definition at line 759 of file smc-ircc.c.

References iobuff_t::data, chipio_t::dma, DMA_RX_MODE, inb, ircc_cb::io, IO_RECV, IRCC_CFGB_DMA_BURST, IRCC_CFGB_DMA_ENABLE, IRCC_LCR_B, IRCC_LCR_B_SCE_RECEIVE, IRCC_LCR_B_SIP_ENABLE, IRCC_RX_SIZE_HI, IRCC_RX_SIZE_LO, IRCC_SCE_CFGB, outb, register_bank(), ircc_cb::rx_buff, setup_dma(), iobuff_t::truesize, x0f, and xff.

Referenced by ircc_change_speed(), and ircc_interrupt().

Here is the call graph for this function:

static void ircc_dma_receive_complete struct ircc_cb self,
int  iobase
[static]
 

Definition at line 798 of file smc-ircc.c.

References sk_buff::data, iobuff_t::data, sk_buff::dev, chipio_t::dma, ETH_P_IRDA, get_dma_residue, htons(), inb, ircc_cb::io, IRCC_LCR_B, IRDA_DEBUG, len, sk_buff::mac, memcpy, netif_rx(), outb, sk_buff::protocol, register_bank(), ircc_cb::rx_buff, chipio_t::speed, WARNING, and x00.

Referenced by ircc_interrupt().

Here is the call graph for this function:

static void ircc_dma_xmit struct ircc_cb self,
int  iobase,
int  bofs
[static]
 

Definition at line 660 of file smc-ircc.c.

References iobuff_t::data, chipio_t::dma, DMA_TX_MODE, inb, ircc_cb::io, IO_XMIT, IRCC_BOF_COUNT_HI, IRCC_BOF_COUNT_LO, IRCC_CFGB_DMA_BURST, IRCC_CFGB_DMA_ENABLE, IRCC_CONTROL, IRCC_IER, IRCC_IER_ACTIVE_FRAME, IRCC_IER_EOM, IRCC_LCR_B, IRCC_LCR_B_SCE_TRANSMIT, IRCC_LCR_B_SIP_ENABLE, IRCC_MASTER, IRCC_MASTER_INT_EN, IRCC_SCE_CFGB, IRCC_TX_SIZE_HI, IRCC_TX_SIZE_LO, IRDA_DEBUG, iobuff_t::len, outb, register_bank(), setup_dma(), chipio_t::sir_base, ircc_cb::tx_buff, UART_MCR, UART_MCR_OUT2, x00, x0f, and xff.

Referenced by ircc_hard_xmit().

Here is the call graph for this function:

static void ircc_dma_xmit_complete struct ircc_cb self,
int  iobase
[static]
 

Definition at line 712 of file smc-ircc.c.

References chipio_t::fir_base, inb, ircc_cb::io, IRCC_CFGB_DMA_ENABLE, ircc_change_speed(), IRCC_LCR_B, IRCC_LSR, IRCC_LSR_UNDERRUN, IRCC_MASTER, IRCC_MASTER_ERROR_RESET, IRCC_SCE_CFGB, IRDA_DEBUG, mark_bh, NET_BH, ircc_cb::new_speed, outb, register_bank(), and x00.

Referenced by ircc_interrupt().

Here is the call graph for this function:

static int ircc_hard_xmit struct sk_buff skb,
struct device *  dev
[static]
 

Definition at line 600 of file smc-ircc.c.

References ASSERT, sk_buff::data, dev_kfree_skb, EBUSY, FALSE, iobuff_t::head, ircc_cb::io, ircc_dma_xmit(), irda_get_mtt, irda_get_speed, irda_lock(), sk_buff::len, ircc_cb::lock, memcpy, NULL, irport_cb::priv, chipio_t::speed, speed, spin_lock_irqsave, spin_unlock_irqrestore, and ircc_cb::tx_buff.

Referenced by ircc_change_speed().

Here is the call graph for this function:

int __init ircc_init void   ) 
 

Definition at line 121 of file smc-ircc.c.

References chipio_t::cfg_base, check_region, chip, CHIP_IO_EXTENT, ENODEV, chipio_t::fir_base, i, io, io2, ircc_open(), IRDA_DEBUG, smc_chip::name, smc_chip::probe, ret, and chipio_t::sir_base.

Referenced by irda_device_init().

Here is the call graph for this function:

static void ircc_interrupt int  irq,
void *  dev_id,
struct pt_regs regs
[static]
 

Definition at line 854 of file smc-ircc.c.

References ASSERT, dev, device, chipio_t::direction, driver_name, iir, inb, ircc_cb::io, IO_RECV, ircc_dma_receive(), ircc_dma_receive_complete(), ircc_dma_xmit_complete(), IRCC_IER, IRCC_IER_ACTIVE_FRAME, IRCC_IER_EOM, IRCC_IIR, IRCC_IIR_EOM, IRDA_DEBUG, irport_interrupt(), KERN_WARNING, ircc_cb::lock, NULL, outb, printk, irport_cb::priv, register_bank(), chipio_t::speed, spin_lock, and spin_unlock.

Referenced by ircc_open().

Here is the call graph for this function:

static int ircc_is_receiving struct ircc_cb self  )  [static]
 

Definition at line 912 of file smc-ircc.c.

References ASSERT, chipio_t::dma, FALSE, get_dma_residue, ircc_cb::io, IRDA_DEBUG, NULL, OUTSIDE_FRAME, and status.

static int ircc_net_close struct device *  dev  )  [static]
 

Definition at line 974 of file smc-ircc.c.

References ASSERT, disable_dma(), chipio_t::dma, free_dma(), ircc_cb::io, IRDA_DEBUG, irport_net_close(), MOD_DEC_USE_COUNT, NULL, and irport_cb::priv.

Referenced by ircc_open().

Here is the call graph for this function:

static int ircc_net_open struct device *  dev  )  [static]
 

Definition at line 935 of file smc-ircc.c.

References ASSERT, chipio_t::dma, EAGAIN, ircc_cb::io, IRDA_DEBUG, irport_net_close(), irport_net_open(), MOD_INC_USE_COUNT, NULL, irport_cb::priv, and request_dma().

Referenced by ircc_open().

Here is the call graph for this function:

static int ircc_open int  i,
unsigned int  iobase,
unsigned int  board_addr
[static]
 

Definition at line 183 of file smc-ircc.c.

References qos_info::baud_rate, qos_value_t::bits, irport_cb::change_speed, check_region, CHIP_IO_EXTENT, driver_name, ENODEV, ENOMEM, ERROR, FALSE, irport_cb::flags, IFF_DMA, IFF_FIR, IFF_MIR, IFF_PIO, IFF_SIR, irport_cb::interrupt, IR_115200, IR_1152000, IR_19200, IR_38400, IR_4000000, IR_57600, IR_576000, IR_9600, ircc_change_speed(), ircc_dma, ircc_interrupt(), ircc_irq, ircc_net_close(), ircc_net_open(), ircc_probe(), IRDA_DEBUG, irda_init_max_qos_capabilies(), irda_qos_bits_to_value(), irport_open(), irport_start(), kfree(), kmalloc(), memset, MESSAGE, qos_info::min_turn_time, irport_cb::netdev, NULL, OUTSIDE_FRAME, irport_cb::priv, irport_cb::qos, request_region, ret, spin_lock_init, and x0f.

Referenced by ircc_init().

Here is the call graph for this function:

static int ircc_probe int  iobase,
int  board_addr
[static]
 

Definition at line 454 of file smc-ircc.c.

References chip, dma, ENODEV, high(), inb, IRCC_CHIP_ID, IRCC_ID_HIGH, IRCC_ID_LOW, IRCC_INTERFACE, IRCC_MASTER, IRCC_VERSION, IRDA_DEBUG, irq, MESSAGE, outb, register_bank(), version, x00, x0f, and x10.

Referenced by ircc_open().

Here is the call graph for this function:

static int ircc_probe_58 smc_chip_t chip,
chipio_t info
[static]
 

Definition at line 401 of file smc-ircc.c.

References chipio_t::cfg_base, smc_chip::cid_index, smc_chip::cid_value, ENODEV, smc_chip::entr1, smc_chip::entr2, chipio_t::fir_base, inb, IRDA_DEBUG, outb, ret, chipio_t::sir_base, x05, x07, x60, x61, x62, and xaa.

static int ircc_probe_69 smc_chip_t chip,
chipio_t info
[static]
 

Definition at line 350 of file smc-ircc.c.

References chipio_t::cfg_base, smc_chip::cid_index, smc_chip::cid_value, ENODEV, smc_chip::entr1, smc_chip::entr2, chipio_t::fir_base, inb, IRDA_DEBUG, outb, ret, chipio_t::sir_base, x0c(), and xaa.

Here is the call graph for this function:

static void register_bank int  iobase,
int  bank
[inline, static]
 

Definition at line 109 of file smc-ircc.c.

References inb, IRCC_MASTER, outb, x07, and xf0.

Referenced by ircc_change_speed(), ircc_dma_receive(), ircc_dma_receive_complete(), ircc_dma_xmit(), ircc_dma_xmit_complete(), ircc_interrupt(), and ircc_probe().


Variable Documentation

smc_chip_t chips[] [static]
 

Initial value:

{
        { "FDC37C669", 0x55, 0x55, 0x0d, 0x04, ircc_probe_69 },
        { "FDC37N869", 0x55, 0x00, 0x0d, 0x29, ircc_probe_69 },
        { "FDC37N958", 0x55, 0x55, 0x20, 0x09, ircc_probe_58 },
        { NULL }
}

Definition at line 98 of file smc-ircc.c.

struct ircc_cb* dev_self[] = { NULL, NULL} [static]
 

Definition at line 73 of file smc-ircc.c.

char* driver_name = "smc-ircc" [static]
 

Definition at line 66 of file smc-ircc.c.

unsigned int io[] = { ~0, ~0 } [static]
 

Definition at line 70 of file smc-ircc.c.

unsigned int io2[] = { 0, 0 } [static]
 

Definition at line 71 of file smc-ircc.c.

int ircc_dma = 255 [static]
 

Definition at line 107 of file smc-ircc.c.

Referenced by ircc_open().

int ircc_irq = 255 [static]
 

Definition at line 106 of file smc-ircc.c.

Referenced by ircc_open().