/* Copyright (c) 2010-2011, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * only version 2 as published by the Free Software Foundation. * * 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 __APR_TAL_H_ #define __APR_TAL_H_ #include #include #include /* APR Client IDs */ #define APR_CLIENT_AUDIO 0x0 #define APR_CLIENT_VOICE 0x1 #define APR_CLIENT_MAX 0x2 #define APR_DL_SMD 0 #define APR_DL_MAX 1 #define APR_DEST_MODEM 0 #define APR_DEST_QDSP6 1 #define APR_DEST_MAX 2 #define APR_MAX_BUF 8192 #define APR_OPEN_TIMEOUT_MS 5000 typedef void (*apr_svc_cb_fn)(void *buf, int len, void *priv); struct apr_svc_ch_dev *apr_tal_open(uint32_t svc, uint32_t dest, uint32_t dl, apr_svc_cb_fn func, void *priv); int apr_tal_write(struct apr_svc_ch_dev *apr_ch, void *data, int len); int apr_tal_close(struct apr_svc_ch_dev *apr_ch); struct apr_svc_ch_dev { struct smd_channel *ch; spinlock_t lock; spinlock_t w_lock; struct mutex m_lock; apr_svc_cb_fn func; char data[APR_MAX_BUF]; wait_queue_head_t wait; void *priv; uint32_t smd_state; wait_queue_head_t dest; uint32_t dest_state; }; #endif