| /* | |
| * Blackfin Infra-red Driver | |
| * | |
| * Copyright 2006-2009 Analog Devices Inc. | |
| * | |
| * Enter bugs at http://blackfin.uclinux.org/ | |
| * | |
| * Licensed under the GPL-2 or later. | |
| * | |
| */ | |
| #include <linux/serial.h> | |
| #include <linux/module.h> | |
| #include <linux/netdevice.h> | |
| #include <linux/interrupt.h> | |
| #include <linux/delay.h> | |
| #include <linux/platform_device.h> | |
| #include <linux/dma-mapping.h> | |
| #include <linux/slab.h> | |
| #include <net/irda/irda.h> | |
| #include <net/irda/wrapper.h> | |
| #include <net/irda/irda_device.h> | |
| #include <asm/irq.h> | |
| #include <asm/cacheflush.h> | |
| #include <asm/dma.h> | |
| #include <asm/portmux.h> | |
| #undef DRIVER_NAME | |
| #ifdef CONFIG_SIR_BFIN_DMA | |
| struct dma_rx_buf { | |
| char *buf; | |
| int head; | |
| int tail; | |
| }; | |
| #endif | |
| struct bfin_sir_port { | |
| unsigned char __iomem *membase; | |
| unsigned int irq; | |
| unsigned int lsr; | |
| unsigned long clk; | |
| struct net_device *dev; | |
| #ifdef CONFIG_SIR_BFIN_DMA | |
| int tx_done; | |
| struct dma_rx_buf rx_dma_buf; | |
| struct timer_list rx_dma_timer; | |
| int rx_dma_nrows; | |
| #endif | |
| unsigned int tx_dma_channel; | |
| unsigned int rx_dma_channel; | |
| }; | |
| struct bfin_sir_port_res { | |
| unsigned long base_addr; | |
| int irq; | |
| unsigned int rx_dma_channel; | |
| unsigned int tx_dma_channel; | |
| }; | |
| struct bfin_sir_self { | |
| struct bfin_sir_port *sir_port; | |
| spinlock_t lock; | |
| unsigned int open; | |
| int speed; | |
| int newspeed; | |
| struct sk_buff *txskb; | |
| struct sk_buff *rxskb; | |
| struct net_device_stats stats; | |
| struct device *dev; | |
| struct irlap_cb *irlap; | |
| struct qos_info qos; | |
| iobuff_t tx_buff; | |
| iobuff_t rx_buff; | |
| struct work_struct work; | |
| int mtt; | |
| }; | |
| #define DRIVER_NAME "bfin_sir" | |
| #define port_membase(port) (((struct bfin_sir_port *)(port))->membase) | |
| #define get_lsr_cache(port) (((struct bfin_sir_port *)(port))->lsr) | |
| #define put_lsr_cache(port, v) (((struct bfin_sir_port *)(port))->lsr = (v)) | |
| #include <asm/bfin_serial.h> | |
| static const unsigned short per[][4] = { | |
| /* rx pin tx pin NULL uart_number */ | |
| {P_UART0_RX, P_UART0_TX, 0, 0}, | |
| {P_UART1_RX, P_UART1_TX, 0, 1}, | |
| {P_UART2_RX, P_UART2_TX, 0, 2}, | |
| {P_UART3_RX, P_UART3_TX, 0, 3}, | |
| }; |