Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / tty / serial / ifx6x60.h
1 /****************************************************************************
2  *
3  * Driver for the IFX spi modem.
4  *
5  * Copyright (C) 2009, 2010 Intel Corp
6  * Jim Stanley <jim.stanley@intel.com>
7  *
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License version 2 as
11  * published by the Free Software Foundation.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
21  * USA
22  *
23  *
24  *
25  *****************************************************************************/
26 #ifndef _IFX6X60_H
27 #define _IFX6X60_H
28
29 #define DRVNAME                         "ifx6x60"
30 #define TTYNAME                         "ttyIFX"
31
32 #define IFX_SPI_MAX_MINORS              1
33 #define IFX_SPI_TRANSFER_SIZE           2048
34 #define IFX_SPI_FIFO_SIZE               4096
35
36 #define IFX_SPI_HEADER_OVERHEAD         4
37 #define IFX_RESET_TIMEOUT               msecs_to_jiffies(50)
38
39 /* device flags bitfield definitions */
40 #define IFX_SPI_STATE_PRESENT           0
41 #define IFX_SPI_STATE_IO_IN_PROGRESS    1
42 #define IFX_SPI_STATE_IO_READY          2
43 #define IFX_SPI_STATE_TIMER_PENDING     3
44 #define IFX_SPI_STATE_IO_AVAILABLE      4
45
46 /* flow control bitfields */
47 #define IFX_SPI_DCD                     0
48 #define IFX_SPI_CTS                     1
49 #define IFX_SPI_DSR                     2
50 #define IFX_SPI_RI                      3
51 #define IFX_SPI_DTR                     4
52 #define IFX_SPI_RTS                     5
53 #define IFX_SPI_TX_FC                   6
54 #define IFX_SPI_RX_FC                   7
55 #define IFX_SPI_UPDATE                  8
56
57 #define IFX_SPI_PAYLOAD_SIZE            (IFX_SPI_TRANSFER_SIZE - \
58                                                 IFX_SPI_HEADER_OVERHEAD)
59
60 #define IFX_SPI_IRQ_TYPE                DETECT_EDGE_RISING
61 #define IFX_SPI_GPIO_TARGET             0
62 #define IFX_SPI_GPIO0                   0x105
63
64 #define IFX_SPI_STATUS_TIMEOUT          (2000*HZ)
65
66 /* values for bits in power status byte */
67 #define IFX_SPI_POWER_DATA_PENDING      1
68 #define IFX_SPI_POWER_SRDY              2
69
70 struct ifx_spi_device {
71         /* Our SPI device */
72         struct spi_device *spi_dev;
73
74         /* Port specific data */
75         struct kfifo tx_fifo;
76         spinlock_t fifo_lock;
77         unsigned long signal_state;
78
79         /* TTY Layer logic */
80         struct tty_port tty_port;
81         struct device *tty_dev;
82         int minor;
83
84         /* Low level I/O work */
85         struct tasklet_struct io_work_tasklet;
86         unsigned long flags;
87         dma_addr_t rx_dma;
88         dma_addr_t tx_dma;
89
90         int modem;              /* Modem type */
91         int use_dma;            /* provide dma-able addrs in SPI msg */
92         long max_hz;            /* max SPI frequency */
93
94         spinlock_t write_lock;
95         int write_pending;
96         spinlock_t power_lock;
97         unsigned char power_status;
98
99         unsigned char *rx_buffer;
100         unsigned char *tx_buffer;
101         dma_addr_t rx_bus;
102         dma_addr_t tx_bus;
103         unsigned char spi_more;
104         unsigned char spi_slave_cts;
105
106         struct timer_list spi_timer;
107
108         struct spi_message spi_msg;
109         struct spi_transfer spi_xfer;
110
111         struct {
112                 /* gpio lines */
113                 unsigned short srdy;            /* slave-ready gpio */
114                 unsigned short mrdy;            /* master-ready gpio */
115                 unsigned short reset;           /* modem-reset gpio */
116                 unsigned short po;              /* modem-on gpio */
117                 unsigned short reset_out;       /* modem-in-reset gpio */
118                 /* state/stats */
119                 int unack_srdy_int_nb;
120         } gpio;
121
122         /* modem reset */
123         unsigned long mdm_reset_state;
124 #define MR_START        0
125 #define MR_INPROGRESS   1
126 #define MR_COMPLETE     2
127         wait_queue_head_t mdm_reset_wait;
128         void (*swap_buf)(unsigned char *buf, int len, void *end);
129 };
130
131 #endif /* _IFX6X60_H */