linux/arch/arm/mach-msm/include/mach/msm_smd.h
<<
>>
Prefs
   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
  20typedef struct smd_channel smd_channel_t;
  21
  22extern int (*msm_check_for_modem_crash)(void);
  23
  24/* warning: notify() may be called before open returns */
  25int 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
  32int smd_close(smd_channel_t *ch);
  33
  34/* passing a null pointer for data reads and discards */
  35int 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*/
  42int smd_write(smd_channel_t *ch, const void *data, int len);
  43int smd_write_atomic(smd_channel_t *ch, const void *data, int len);
  44
  45int smd_write_avail(smd_channel_t *ch);
  46int 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*/
  51int 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*/
  57void 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*/
  64int smd_wait_until_readable(smd_channel_t *ch, int bytes);
  65int smd_wait_until_writable(smd_channel_t *ch, int bytes);
  66#endif
  67
  68typedef 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