blob: 2901aa0a58d54fbc153ffb1b850a636b8b21fcc6 [file] [log] [blame]
Flemmard44c97d52014-02-21 21:04:44 +01001/*
2 * include/linux/hsuart.h - High speed UART driver APIs
3 *
4 * Copyright (C) 2008 Palm Inc,
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
11 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
12 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13 *
14 * Author: Amir Frenkel (amir.frenkel@palm.com)
15 * Based on existing Palm HSUART driver interface
16 *
17 */
18#ifndef __HSUART_INCLUDED__
19#define __HSUART_INCLUDED__
20
21/**/
22#define HSUART_VER_MAJOR(v) (((v)>>8) & 0xFF)
23#define HSUART_VER_MINOR(v) (((v)) & 0xFF)
24
25/* known set of uart speed settings */
26#define HSUART_SPEED_38K 38400
27#define HSUART_SPEED_115K 115200
28#define HSUART_SPEED_1228K 1228800
29#define HSUART_SPEED_3686K 3686400
30
31/*
32 Specifies target HSUART_IOCTL_CLEAR_FIFO/HSUART_IOCTL_FLUSH
33*/
34#define HSUART_RX_FIFO (1 << 0) // UART RX FIFO
35#define HSUART_TX_FIFO (1 << 1) // UART TX FIFO
36#define HSUART_TX_QUEUE (1 << 2) // RX BUFFERS
37#define HSUART_RX_QUEUE (1 << 3) // TX BUFFERS
38
39/*
40 * Rx flow control
41 */
42#define HSUART_RX_FLOW_OFF 0 // DEPRECATED
43#define HSUART_RX_FLOW_AUTO 0
44#define HSUART_RX_FLOW_ON 1
45
46/* */
47struct hsuart_buf_inf {
48 int rx_buf_num; // total number of tx buffers
49 int rx_buf_size; // size of tx buffer
50 int tx_buf_num; // total number of rx buffers
51 int tx_buf_size; // size of rx buffer
52};
53
54struct hsuart_mode {
55 int speed;
56 int flags;
57};
58
59struct hsuart_stat {
60 unsigned long tx_bytes;
61 unsigned long rx_bytes;
62 unsigned long rx_dropped;
63};
64
65#define HSUART_MODE_LOOPBACK (1 << 8)
66
67#define HSUART_MODE_FLOW_CTRL_BIT (0)
68#define HSUART_MODE_FLOW_CTRL_MODE_MASK (3 << HSUART_MODE_FLOW_CTRL_BIT)
69#define HSUART_MODE_FLOW_CTRL_NONE (0 << HSUART_MODE_FLOW_CTRL_BIT)
70#define HSUART_MODE_FLOW_CTRL_HW (1 << HSUART_MODE_FLOW_CTRL_BIT)
71#define HSUART_MODE_FLOW_CTRL_SW (2 << HSUART_MODE_FLOW_CTRL_BIT)
72
73#define HSUART_MODE_FLOW_STATE_BIT (9)
74#define HSUART_MODE_FLOW_STATE_MASK (1 << HSUART_MODE_FLOW_STATE_BIT)
75#define HSUART_MODE_FLOW_STATE_ASSERT (0 << HSUART_MODE_FLOW_STATE_BIT)
76#define HSUART_MODE_FLOW_STATE_DEASSERT (1 << HSUART_MODE_FLOW_STATE_BIT)
77
78#define HSUART_MODE_FLOW_DIRECTION_BIT (10)
79#define HSUART_MODE_FLOW_DIRECTION_MASK (3 << HSUART_MODE_FLOW_DIRECTION_BIT)
80#define HSUART_MODE_FLOW_DIRECTION_RX_TX (0 << HSUART_MODE_FLOW_DIRECTION_BIT)
81#define HSUART_MODE_FLOW_DIRECTION_RX_ONLY (1 << HSUART_MODE_FLOW_DIRECTION_BIT)
82#define HSUART_MODE_FLOW_DIRECTION_TX_ONLY (2 << HSUART_MODE_FLOW_DIRECTION_BIT)
83
84#define HSUART_MODE_FLOW_CTRL_MASK ( HSUART_MODE_FLOW_CTRL_MODE_MASK | HSUART_MODE_FLOW_STATE_MASK | HSUART_MODE_FLOW_DIRECTION_MASK )
85
86#define HSUART_MODE_PARITY_BIT (2)
87#define HSUART_MODE_PARITY_MASK (3 << HSUART_MODE_PARITY_BIT)
88#define HSUART_MODE_PARITY_NONE (0 << HSUART_MODE_PARITY_BIT)
89#define HSUART_MODE_PARITY_ODD (1 << HSUART_MODE_PARITY_BIT)
90#define HSUART_MODE_PARITY_EVEN (2 << HSUART_MODE_PARITY_BIT)
91
92
93/* IOCTLs */
94#define HSUART_IOCTL_GET_VERSION _IOR('h', 0x01, int)
95#define HSUART_IOCTL_GET_BUF_INF _IOR('h', 0x02, struct hsuart_buf_inf )
96#define HSUART_IOCTL_GET_UARTMODE _IOR('h', 0x04, struct hsuart_mode )
97#define HSUART_IOCTL_SET_UARTMODE _IOW('h', 0x05, struct hsuart_mode )
98#define HSUART_IOCTL_RESET_UART _IO ('h', 0x06)
99#define HSUART_IOCTL_CLEAR_FIFO _IOW('h', 0x07, int) // DEPRECATED use HSUART_IOCTL_FLUSH instead
100#define HSUART_IOCTL_GET_STATS _IOW('h', 0x08, struct hsuart_stat )
101#define HSUART_IOCTL_SET_RXLAT _IOW('h', 0x09, int)
102#define HSUART_IOCTL_TX_DRAIN _IOW('h', 0x0b, int)
103#define HSUART_IOCTL_RX_BYTES _IOW('h', 0x0c, int)
104#define HSUART_IOCTL_RX_FLOW _IOW('h', 0x0d, int)
105#define HSUART_IOCTL_FLUSH _IOW('h', 0x0e, int)
106
107#ifdef __KERNEL__
108
109
110/*
111 * The UART port initialization and start receiving data is not done
112 * automatically when the driver is loaded but delayed to when the 'open'
113 * is called.
114 */
115#define HSUART_OPTION_DEFERRED_LOAD (1 << 0)
116#define HSUART_OPTION_MODEM_DEVICE (1 << 1)
117#define HSUART_OPTION_TX_PIO (1 << 2)
118#define HSUART_OPTION_RX_PIO (1 << 3)
119#define HSUART_OPTION_TX_DM (1 << 4)
120#define HSUART_OPTION_RX_DM (1 << 5)
121#define HSUART_OPTION_RX_FLUSH_QUEUE_ON_SUSPEND (1 << 6)
122#define HSUART_OPTION_TX_FLUSH_QUEUE_ON_SUSPEND (1 << 7)
123#define HSUART_OPTION_SCHED_RT (1 << 8)
124
125struct hsuart_platform_data {
126 const char *dev_name;
127 int uart_mode; // default uart mode
128 int uart_speed; // default uart speed
129 int options; // operation options
130 int tx_buf_size; // size of tx buffer
131 int tx_buf_num; // number of preallocated tx buffers
132 int rx_buf_size; // size of rx buffer
133 int rx_buf_num; // number of preallocated rx buffers
134 int max_packet_size; // max packet size
135 int min_packet_size; // min packet size
136 int rx_latency; // in bytes at current speed
137 int rts_pin; // uart rts line pin
138 char *rts_act_mode; // uart rts line active mode
139 char *rts_gpio_mode; // uart rts line gpio mode
140 int idle_timeout; // idle timeout
141 int idle_poll_timeout; // idle poll timeout
142 int dbg_level; // default debug level.
143
144 int (*p_board_pin_mux_cb) ( int on );
145 int (*p_board_config_gsbi_cb) ( void );
146 int (*p_board_rts_pin_deassert_cb) ( int deassert );
147};
148
149#endif
150
151#endif // __HSUART_INCLUDED__
152
153