Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/arm/mach-msm/include/mach/msm_smd.h
17653 views
1
/* linux/include/asm-arm/arch-msm/msm_smd.h
2
*
3
* Copyright (C) 2007 Google, Inc.
4
* Author: Brian Swetland <[email protected]>
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
extern int (*msm_check_for_modem_crash)(void);
23
24
/* warning: notify() may be called before open returns */
25
int smd_open(const char *name, smd_channel_t **ch, void *priv,
26
void (*notify)(void *priv, unsigned event));
27
28
#define SMD_EVENT_DATA 1
29
#define SMD_EVENT_OPEN 2
30
#define SMD_EVENT_CLOSE 3
31
32
int smd_close(smd_channel_t *ch);
33
34
/* passing a null pointer for data reads and discards */
35
int smd_read(smd_channel_t *ch, void *data, int len);
36
37
/* Write to stream channels may do a partial write and return
38
** the length actually written.
39
** Write to packet channels will never do a partial write --
40
** it will return the requested length written or an error.
41
*/
42
int smd_write(smd_channel_t *ch, const void *data, int len);
43
int smd_write_atomic(smd_channel_t *ch, const void *data, int len);
44
45
int smd_write_avail(smd_channel_t *ch);
46
int smd_read_avail(smd_channel_t *ch);
47
48
/* Returns the total size of the current packet being read.
49
** Returns 0 if no packets available or a stream channel.
50
*/
51
int smd_cur_packet_size(smd_channel_t *ch);
52
53
/* used for tty unthrottling and the like -- causes the notify()
54
** callback to be called from the same lock context as is used
55
** when it is called from channel updates
56
*/
57
void smd_kick(smd_channel_t *ch);
58
59
60
#if 0
61
/* these are interruptable waits which will block you until the specified
62
** number of bytes are readable or writable.
63
*/
64
int smd_wait_until_readable(smd_channel_t *ch, int bytes);
65
int smd_wait_until_writable(smd_channel_t *ch, int bytes);
66
#endif
67
68
typedef enum {
69
SMD_PORT_DS = 0,
70
SMD_PORT_DIAG,
71
SMD_PORT_RPC_CALL,
72
SMD_PORT_RPC_REPLY,
73
SMD_PORT_BT,
74
SMD_PORT_CONTROL,
75
SMD_PORT_MEMCPY_SPARE1,
76
SMD_PORT_DATA1,
77
SMD_PORT_DATA2,
78
SMD_PORT_DATA3,
79
SMD_PORT_DATA4,
80
SMD_PORT_DATA5,
81
SMD_PORT_DATA6,
82
SMD_PORT_DATA7,
83
SMD_PORT_DATA8,
84
SMD_PORT_DATA9,
85
SMD_PORT_DATA10,
86
SMD_PORT_DATA11,
87
SMD_PORT_DATA12,
88
SMD_PORT_DATA13,
89
SMD_PORT_DATA14,
90
SMD_PORT_DATA15,
91
SMD_PORT_DATA16,
92
SMD_PORT_DATA17,
93
SMD_PORT_DATA18,
94
SMD_PORT_DATA19,
95
SMD_PORT_DATA20,
96
SMD_PORT_GPS_NMEA,
97
SMD_PORT_BRIDGE_1,
98
SMD_PORT_BRIDGE_2,
99
SMD_PORT_BRIDGE_3,
100
SMD_PORT_BRIDGE_4,
101
SMD_PORT_BRIDGE_5,
102
SMD_PORT_LOOPBACK,
103
SMD_PORT_CS_APPS_MODEM,
104
SMD_PORT_CS_APPS_DSP,
105
SMD_PORT_CS_MODEM_DSP,
106
SMD_NUM_PORTS,
107
} smd_port_id_type;
108
109
#endif
110
111