| /* |
| * 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}, |
| }; |