Ensure FMODE_NONOTIFY is not set by userspace
[pandora-kernel.git] / drivers / staging / dream / include / mach / msm_smd.h
1 /* linux/include/asm-arm/arch-msm/msm_smd.h
2  *
3  * Copyright (C) 2007 Google, Inc.
4  * Author: Brian Swetland <swetland@google.com>
5  *
6  * This software is licensed under the terms of the GNU General Public
7  * License version 2, as published by the Free Software Foundation, and
8  * may be copied, distributed, and modified under those terms.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  */
16
17 #ifndef __ASM_ARCH_MSM_SMD_H
18 #define __ASM_ARCH_MSM_SMD_H
19
20 typedef struct smd_channel smd_channel_t;
21
22 /* warning: notify() may be called before open returns */
23 int smd_open(const char *name, smd_channel_t **ch, void *priv,
24              void (*notify)(void *priv, unsigned event));
25
26 #define SMD_EVENT_DATA 1
27 #define SMD_EVENT_OPEN 2
28 #define SMD_EVENT_CLOSE 3
29
30 int smd_close(smd_channel_t *ch);
31
32 /* passing a null pointer for data reads and discards */
33 int smd_read(smd_channel_t *ch, void *data, int len);
34
35 /* Write to stream channels may do a partial write and return
36 ** the length actually written.
37 ** Write to packet channels will never do a partial write --
38 ** it will return the requested length written or an error.
39 */
40 int smd_write(smd_channel_t *ch, const void *data, int len);
41
42 int smd_write_avail(smd_channel_t *ch);
43 int smd_read_avail(smd_channel_t *ch);
44
45 /* Returns the total size of the current packet being read.
46 ** Returns 0 if no packets available or a stream channel.
47 */
48 int smd_cur_packet_size(smd_channel_t *ch);
49
50 /* used for tty unthrottling and the like -- causes the notify()
51 ** callback to be called from the same lock context as is used
52 ** when it is called from channel updates
53 */
54 void smd_kick(smd_channel_t *ch);
55
56
57 #if 0
58 /* these are interruptable waits which will block you until the specified
59 ** number of bytes are readable or writable.
60 */
61 int smd_wait_until_readable(smd_channel_t *ch, int bytes);
62 int smd_wait_until_writable(smd_channel_t *ch, int bytes);
63 #endif
64
65 typedef enum
66 {
67         SMD_PORT_DS = 0,
68         SMD_PORT_DIAG,
69         SMD_PORT_RPC_CALL,
70         SMD_PORT_RPC_REPLY,
71         SMD_PORT_BT,
72         SMD_PORT_CONTROL,
73         SMD_PORT_MEMCPY_SPARE1,
74         SMD_PORT_DATA1,
75         SMD_PORT_DATA2,
76         SMD_PORT_DATA3,
77         SMD_PORT_DATA4,
78         SMD_PORT_DATA5,
79         SMD_PORT_DATA6,
80         SMD_PORT_DATA7,
81         SMD_PORT_DATA8,
82         SMD_PORT_DATA9,
83         SMD_PORT_DATA10,
84         SMD_PORT_DATA11,
85         SMD_PORT_DATA12,
86         SMD_PORT_DATA13,
87         SMD_PORT_DATA14,
88         SMD_PORT_DATA15,
89         SMD_PORT_DATA16,
90         SMD_PORT_DATA17,
91         SMD_PORT_DATA18,
92         SMD_PORT_DATA19,
93         SMD_PORT_DATA20,
94         SMD_PORT_GPS_NMEA,
95         SMD_PORT_BRIDGE_1,
96         SMD_PORT_BRIDGE_2,
97         SMD_PORT_BRIDGE_3,
98         SMD_PORT_BRIDGE_4,
99         SMD_PORT_BRIDGE_5,
100         SMD_PORT_LOOPBACK,
101         SMD_PORT_CS_APPS_MODEM,
102         SMD_PORT_CS_APPS_DSP,
103         SMD_PORT_CS_MODEM_DSP,
104         SMD_NUM_PORTS,
105 } smd_port_id_type;
106
107 #endif