Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
bfin_sir.h
Go to the documentation of this file.
1 /*
2  * Blackfin Infra-red Driver
3  *
4  * Copyright 2006-2009 Analog Devices Inc.
5  *
6  * Enter bugs at http://blackfin.uclinux.org/
7  *
8  * Licensed under the GPL-2 or later.
9  *
10  */
11 
12 #include <linux/serial.h>
13 #include <linux/module.h>
14 #include <linux/netdevice.h>
15 #include <linux/interrupt.h>
16 #include <linux/delay.h>
17 #include <linux/platform_device.h>
18 #include <linux/dma-mapping.h>
19 #include <linux/slab.h>
20 
21 #include <net/irda/irda.h>
22 #include <net/irda/wrapper.h>
23 #include <net/irda/irda_device.h>
24 
25 #include <asm/irq.h>
26 #include <asm/cacheflush.h>
27 #include <asm/dma.h>
28 #include <asm/portmux.h>
29 #undef DRIVER_NAME
30 
31 #ifdef CONFIG_SIR_BFIN_DMA
32 struct dma_rx_buf {
33  char *buf;
34  int head;
35  int tail;
36 };
37 #endif
38 
39 struct bfin_sir_port {
40  unsigned char __iomem *membase;
41  unsigned int irq;
42  unsigned int lsr;
43  unsigned long clk;
44  struct net_device *dev;
45 #ifdef CONFIG_SIR_BFIN_DMA
46  int tx_done;
47  struct dma_rx_buf rx_dma_buf;
48  struct timer_list rx_dma_timer;
49  int rx_dma_nrows;
50 #endif
51  unsigned int tx_dma_channel;
52  unsigned int rx_dma_channel;
53 };
54 
56  unsigned long base_addr;
57  int irq;
58  unsigned int rx_dma_channel;
59  unsigned int tx_dma_channel;
60 };
61 
62 struct bfin_sir_self {
65  unsigned int open;
66  int speed;
67  int newspeed;
68 
69  struct sk_buff *txskb;
70  struct sk_buff *rxskb;
72  struct device *dev;
73  struct irlap_cb *irlap;
74  struct qos_info qos;
75 
78 
79  struct work_struct work;
80  int mtt;
81 };
82 
83 #define DRIVER_NAME "bfin_sir"
84 
85 #define port_membase(port) (((struct bfin_sir_port *)(port))->membase)
86 #define get_lsr_cache(port) (((struct bfin_sir_port *)(port))->lsr)
87 #define put_lsr_cache(port, v) (((struct bfin_sir_port *)(port))->lsr = (v))
88 #include <asm/bfin_serial.h>
89 
90 static const unsigned short per[][4] = {
91  /* rx pin tx pin NULL uart_number */
92  {P_UART0_RX, P_UART0_TX, 0, 0},
93  {P_UART1_RX, P_UART1_TX, 0, 1},
94  {P_UART2_RX, P_UART2_TX, 0, 2},
95  {P_UART3_RX, P_UART3_TX, 0, 3},
96 };