1/* linux/omap_csmi.h
2**
3** Copyright 2005-2006, The Android Open Source Project
4** Author: Arve Hj�nnev�g
5**
6** This file is dual licensed.  It may be redistributed and/or modified
7** under the terms of the Apache 2.0 License OR version 2 of the GNU
8** General Public License.
9*/
10
11#ifndef _OMAP_CSMI_H_
12#define _OMAP_CSMI_H_
13
14#include <asm/ioctl.h>
15
16#ifdef __KERNEL__
17
18typedef struct {
19	uint32_t cmd;
20	uint32_t arg1;
21	uint32_t arg2;
22	uint32_t arg3;
23} omap_csmi_gc_command_t;
24
25typedef struct {
26	void (*ack)(int mailbox);
27	int (*data)(int mailbox);
28	void (*reset)(int mailbox);
29	void (*start)(int mailbox);
30	void (*stop)(int mailbox);
31} omap_csmi_mailbox_handlers_t;
32
33extern uint8_t *omap_csmi_gsm_data_vaddr;
34
35#define SEND_FLAG_NO_ACK_AFTER_SEND 1
36#define SEND_FLAG_REQEST_ACK_IF_BUSY 2
37
38typedef struct {
39	uint32_t magic;                // 0-3     0x494d5347
40	uint32_t header_size;          // 4-7     64
41	uint8_t  mailbox_size;         // 8       8 or 16
42	uint8_t  num_channels;         // 9       2-15
43	uint8_t  gc_channel;           // 10
44	uint8_t  debug_channel;        // 11
45	uint16_t stream_channel_mask;  // 12-13
46	uint16_t pad;                  // 14-15
47	char     vendor_code[16];      // 16-31
48	char     product_code[16];     // 32-47
49	uint32_t version;              // 48-51
50	uint32_t ffs_location;         // 52-55
51	uint32_t ffs_size;             // 56-59   0 or size
52	char     vendor_data[20];       // 60-79
53} omap_csmi_gsm_image_info_t;
54// in platform_device->platform_data where platform_device->name == "omap-csmi"
55
56#define OMAP_GSM_IMAGE_HEADER_MAGIC 0x494d5347 /* GSMI */
57
58struct sysdev_class *omap_csmi_get_sysclass(void);
59unsigned short omap_csmi_get_vendor_boot_flags(void);
60int omap_csmi_gc_command(const omap_csmi_gc_command_t *command, int timeout, omap_csmi_gc_command_t *reply);
61int omap_csmi_send_mailbox(int mailbox, void *data, size_t size, unsigned int flags);
62void omap_csmi_read_mailbox(int mailbox, void *data, size_t size);
63int omap_csmi_install_mailbox_handlers(int mailbox, omap_csmi_mailbox_handlers_t handlers);
64int omap_csmi_uninstall_mailbox_handlers(int mailbox, omap_csmi_mailbox_handlers_t handlers);
65
66//mailbox channel 1 commands
67
68#define GC_DSP_PLL_REQ                  0x0001
69#define GC_ARM_PLL_REQ                  0x0002
70#define GC_READ_MEM_REQ                 0x0003
71#define GC_SET_MEM_REQ                  0x0004
72#define GC_SERIAL_CONFIG_REQ            0x0005
73#define GC_RESET_REQ                    0x0006
74#define GC_SW_VERSION_REQ               0x0007
75#define GC_HW_VERSION_REQ               0x0008
76#define GC_SLEEP_REQ                    0x0009
77#define GC_IRQ_REQ                      0x000A
78#define GC_BATTERY_STATUS_REQ           0x0011
79#define GC_AUDIO_VOICE_REQ              0x0012
80#define GC_AUDIO_VOICEBANDCTL_REQ       0x0013
81#define GC_AUDIO_OUTPUTCTL_REQ          0x0014
82#define GC_AUDIO_SIDETONE_REQ           0x0015
83#define GC_AUDIO_ECHOCANC_REQ           0x0016
84#define GC_AUDIO_STEREO_CODEC_REQ       0x0017
85#define GC_AUDIO_PGA_REQ                0x0018
86#define GC_AUDIO_PROFILE_LOAD_REQ       0x0019
87#define GC_FFS_INIT_RESTORE_REQ         0x0020
88#define GC_FFS_RESTORE_REQ              0x0021
89#define GC_FFS_BACKUP_REQ               0x0022
90#define GC_DAR_GET_INFO_REQ             0x0023
91#define GC_AMR_RECORD_START_REQ         0x0030
92#define GC_AMR_RECORD_STOP_REQ          0x0031
93#define GC_AMR_PLAY_START_REQ           0x0032
94#define GC_AMR_PLAY_STOP_REQ            0x0033
95#define GC_AMR_GET_STATUS_REQ           0x0034
96#define GC_AMR_PURGE_PLAY_BUFFER_REQ    0x0035
97#define GC_ABB_REGISTER_REQ             0x0040
98#define GC_AUDIO_ENHECHOCANC_REQ        0x0041
99
100#define GC_READ_MEM_RES                 0x1000
101#define GC_SW_VERSION_RES               0x1001
102#define GC_HW_VERSION_RES               0x1002
103#define GC_BATTERY_STATUS_RES           0x1005
104#define GC_AUDIO_VOICEBANDCTL_RES       0x1006
105#define GC_AUDIO_OUTPUTCTL_RES          0x1007
106#define GC_AUDIO_STEREO_CODEC_RES       0x1008
107#define GC_AUDIO_PROFILE_LOAD_RES       0x1019
108#define GC_FFS_INIT_RESTORE_RES         0x1020
109#define GC_FFS_BACKUP_RES               0x1022
110#define GC_DAR_GET_INFO_RES             0x1023
111#define GC_AMR_RECORD_START_RES         0x1030
112#define GC_AMR_RECORD_STOP_RES          0x1031
113#define GC_AMR_PLAY_START_RES           0x1032
114#define GC_AMR_PLAY_STOP_RES            0x1033
115#define GC_AMR_GET_STATUS_RES           0x1034
116#define GC_ABB_REGISTER_RES             0x1040
117
118#endif
119
120/* tty ioctls */
121
122#define OMAP_CSMI_TTY_ENABLE_ACK _IO('c', 0)
123#define OMAP_CSMI_TTY_DISABLE_ACK _IO('c', 1)
124#define OMAP_CSMI_TTY_READ_UNACKED _IOR('c', 2, int)
125#define OMAP_CSMI_TTY_ACK _IOW('c', 3, int)
126#define OMAP_CSMI_TTY_WAKEUP_AND_ACK _IOW('c', 4, int)
127
128#endif
129