2008-09-30 07:00:48 +08:00
|
|
|
/* linux/include/asm-arm/arch-msm/msm_smd.h
|
|
|
|
*
|
|
|
|
* Copyright (C) 2007 Google, Inc.
|
|
|
|
* Author: Brian Swetland <swetland@google.com>
|
|
|
|
*
|
|
|
|
* This software is licensed under the terms of the GNU General Public
|
|
|
|
* License version 2, as published by the Free Software Foundation, and
|
|
|
|
* may be copied, distributed, and modified under those terms.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __ASM_ARCH_MSM_SMD_H
|
|
|
|
#define __ASM_ARCH_MSM_SMD_H
|
|
|
|
|
|
|
|
typedef struct smd_channel smd_channel_t;
|
|
|
|
|
2010-03-17 06:20:07 +08:00
|
|
|
extern int (*msm_check_for_modem_crash)(void);
|
|
|
|
|
2008-09-30 07:00:48 +08:00
|
|
|
/* warning: notify() may be called before open returns */
|
|
|
|
int smd_open(const char *name, smd_channel_t **ch, void *priv,
|
|
|
|
void (*notify)(void *priv, unsigned event));
|
|
|
|
|
|
|
|
#define SMD_EVENT_DATA 1
|
|
|
|
#define SMD_EVENT_OPEN 2
|
|
|
|
#define SMD_EVENT_CLOSE 3
|
|
|
|
|
|
|
|
int smd_close(smd_channel_t *ch);
|
|
|
|
|
|
|
|
/* passing a null pointer for data reads and discards */
|
|
|
|
int smd_read(smd_channel_t *ch, void *data, int len);
|
|
|
|
|
|
|
|
/* Write to stream channels may do a partial write and return
|
|
|
|
** the length actually written.
|
|
|
|
** Write to packet channels will never do a partial write --
|
|
|
|
** it will return the requested length written or an error.
|
|
|
|
*/
|
|
|
|
int smd_write(smd_channel_t *ch, const void *data, int len);
|
2009-12-08 07:28:08 +08:00
|
|
|
int smd_write_atomic(smd_channel_t *ch, const void *data, int len);
|
2008-09-30 07:00:48 +08:00
|
|
|
|
|
|
|
int smd_write_avail(smd_channel_t *ch);
|
|
|
|
int smd_read_avail(smd_channel_t *ch);
|
|
|
|
|
|
|
|
/* Returns the total size of the current packet being read.
|
|
|
|
** Returns 0 if no packets available or a stream channel.
|
|
|
|
*/
|
|
|
|
int smd_cur_packet_size(smd_channel_t *ch);
|
|
|
|
|
|
|
|
/* used for tty unthrottling and the like -- causes the notify()
|
|
|
|
** callback to be called from the same lock context as is used
|
|
|
|
** when it is called from channel updates
|
|
|
|
*/
|
|
|
|
void smd_kick(smd_channel_t *ch);
|
|
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
/* these are interruptable waits which will block you until the specified
|
|
|
|
** number of bytes are readable or writable.
|
|
|
|
*/
|
|
|
|
int smd_wait_until_readable(smd_channel_t *ch, int bytes);
|
|
|
|
int smd_wait_until_writable(smd_channel_t *ch, int bytes);
|
|
|
|
#endif
|
|
|
|
|
2010-03-17 06:20:07 +08:00
|
|
|
typedef enum {
|
2008-09-30 07:00:48 +08:00
|
|
|
SMD_PORT_DS = 0,
|
|
|
|
SMD_PORT_DIAG,
|
|
|
|
SMD_PORT_RPC_CALL,
|
|
|
|
SMD_PORT_RPC_REPLY,
|
|
|
|
SMD_PORT_BT,
|
|
|
|
SMD_PORT_CONTROL,
|
|
|
|
SMD_PORT_MEMCPY_SPARE1,
|
|
|
|
SMD_PORT_DATA1,
|
|
|
|
SMD_PORT_DATA2,
|
|
|
|
SMD_PORT_DATA3,
|
|
|
|
SMD_PORT_DATA4,
|
|
|
|
SMD_PORT_DATA5,
|
|
|
|
SMD_PORT_DATA6,
|
|
|
|
SMD_PORT_DATA7,
|
|
|
|
SMD_PORT_DATA8,
|
|
|
|
SMD_PORT_DATA9,
|
|
|
|
SMD_PORT_DATA10,
|
|
|
|
SMD_PORT_DATA11,
|
|
|
|
SMD_PORT_DATA12,
|
|
|
|
SMD_PORT_DATA13,
|
|
|
|
SMD_PORT_DATA14,
|
|
|
|
SMD_PORT_DATA15,
|
|
|
|
SMD_PORT_DATA16,
|
|
|
|
SMD_PORT_DATA17,
|
|
|
|
SMD_PORT_DATA18,
|
|
|
|
SMD_PORT_DATA19,
|
|
|
|
SMD_PORT_DATA20,
|
|
|
|
SMD_PORT_GPS_NMEA,
|
|
|
|
SMD_PORT_BRIDGE_1,
|
|
|
|
SMD_PORT_BRIDGE_2,
|
|
|
|
SMD_PORT_BRIDGE_3,
|
|
|
|
SMD_PORT_BRIDGE_4,
|
|
|
|
SMD_PORT_BRIDGE_5,
|
|
|
|
SMD_PORT_LOOPBACK,
|
|
|
|
SMD_PORT_CS_APPS_MODEM,
|
|
|
|
SMD_PORT_CS_APPS_DSP,
|
|
|
|
SMD_PORT_CS_MODEM_DSP,
|
|
|
|
SMD_NUM_PORTS,
|
|
|
|
} smd_port_id_type;
|
|
|
|
|
|
|
|
#endif
|