thp: madvise(MADV_NOHUGEPAGE)
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / drivers / serial / ifx6x60.h
blobdeb7b8d977dc7ff66e23e913f466ae781de0d65b
1 /****************************************************************************
3 * Driver for the IFX spi modem.
5 * Copyright (C) 2009, 2010 Intel Corp
6 * Jim Stanley <jim.stanley@intel.com>
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.
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.
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
25 *****************************************************************************/
26 #ifndef _IFX6X60_H
27 #define _IFX6X60_H
29 #define DRVNAME "ifx6x60"
30 #define TTYNAME "ttyIFX"
32 /* #define IFX_THROTTLE_CODE */
34 #define IFX_SPI_MAX_MINORS 1
35 #define IFX_SPI_TRANSFER_SIZE 2048
36 #define IFX_SPI_FIFO_SIZE 4096
38 #define IFX_SPI_HEADER_OVERHEAD 4
39 #define IFX_RESET_TIMEOUT msecs_to_jiffies(50)
41 /* device flags bitfield definitions */
42 #define IFX_SPI_STATE_PRESENT 0
43 #define IFX_SPI_STATE_IO_IN_PROGRESS 1
44 #define IFX_SPI_STATE_IO_READY 2
45 #define IFX_SPI_STATE_TIMER_PENDING 3
47 /* flow control bitfields */
48 #define IFX_SPI_DCD 0
49 #define IFX_SPI_CTS 1
50 #define IFX_SPI_DSR 2
51 #define IFX_SPI_RI 3
52 #define IFX_SPI_DTR 4
53 #define IFX_SPI_RTS 5
54 #define IFX_SPI_TX_FC 6
55 #define IFX_SPI_RX_FC 7
56 #define IFX_SPI_UPDATE 8
58 #define IFX_SPI_PAYLOAD_SIZE (IFX_SPI_TRANSFER_SIZE - \
59 IFX_SPI_HEADER_OVERHEAD)
61 #define IFX_SPI_IRQ_TYPE DETECT_EDGE_RISING
62 #define IFX_SPI_GPIO_TARGET 0
63 #define IFX_SPI_GPIO0 0x105
65 #define IFX_SPI_STATUS_TIMEOUT (2000*HZ)
67 /* values for bits in power status byte */
68 #define IFX_SPI_POWER_DATA_PENDING 1
69 #define IFX_SPI_POWER_SRDY 2
71 struct ifx_spi_device {
72 /* Our SPI device */
73 struct spi_device *spi_dev;
75 /* Port specific data */
76 struct kfifo tx_fifo;
77 spinlock_t fifo_lock;
78 unsigned long signal_state;
80 /* TTY Layer logic */
81 struct tty_port tty_port;
82 struct device *tty_dev;
83 int minor;
85 /* Low level I/O work */
86 struct tasklet_struct io_work_tasklet;
87 unsigned long flags;
88 dma_addr_t rx_dma;
89 dma_addr_t tx_dma;
91 int is_6160; /* Modem type */
93 spinlock_t write_lock;
94 int write_pending;
95 spinlock_t power_lock;
96 unsigned char power_status;
98 unsigned char *rx_buffer;
99 unsigned char *tx_buffer;
100 dma_addr_t rx_bus;
101 dma_addr_t tx_bus;
102 unsigned char spi_more;
103 unsigned char spi_slave_cts;
105 struct timer_list spi_timer;
107 struct spi_message spi_msg;
108 struct spi_transfer spi_xfer;
110 struct {
111 /* gpio lines */
112 unsigned short srdy; /* slave-ready gpio */
113 unsigned short mrdy; /* master-ready gpio */
114 unsigned short reset; /* modem-reset gpio */
115 unsigned short po; /* modem-on gpio */
116 unsigned short reset_out; /* modem-in-reset gpio */
117 /* state/stats */
118 int unack_srdy_int_nb;
119 } gpio;
121 /* modem reset */
122 unsigned long mdm_reset_state;
123 #define MR_START 0
124 #define MR_INPROGRESS 1
125 #define MR_COMPLETE 2
126 wait_queue_head_t mdm_reset_wait;
129 #endif /* _IFX6X60_H */