1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
|
/****************************************************************************
**
** COPYRIGHT(C) : Samsung Electronics Co.Ltd, 2006-2010 ALL RIGHTS RESERVED
**
** AUTHOR : Kim, Geun-Young <geunyoung.kim@samsung.com> @LDK@
** @LDK@
****************************************************************************/
#ifndef __DPRAM_H__
#define __DPRAM_H__
/* 32KB Size */
#define DPRAM_SIZE 0x8000
/* Memory Address */
#define DPRAM_START_ADDRESS 0x0000
#define DPRAM_MAGIC_CODE_ADDRESS (DPRAM_START_ADDRESS)
#define DPRAM_ACCESS_ENABLE_ADDRESS (DPRAM_START_ADDRESS + 0x0002)
#define DPRAM_PDA2PHONE_FORMATTED_START_ADDRESS (DPRAM_START_ADDRESS + 0x0004)
#define DPRAM_PDA2PHONE_FORMATTED_HEAD_ADDRESS (DPRAM_PDA2PHONE_FORMATTED_START_ADDRESS)
#define DPRAM_PDA2PHONE_FORMATTED_TAIL_ADDRESS (DPRAM_PDA2PHONE_FORMATTED_START_ADDRESS + 0x0002)
#define DPRAM_PDA2PHONE_FORMATTED_BUFFER_ADDRESS (DPRAM_PDA2PHONE_FORMATTED_START_ADDRESS + 0x0004)
//#define DPRAM_PDA2PHONE_FORMATTED_BUFFER_SIZE 8186 // 0x1ffc
#define DPRAM_PDA2PHONE_FORMATTED_BUFFER_SIZE 4092
#define DPRAM_PDA2PHONE_RAW_START_ADDRESS (DPRAM_PDA2PHONE_FORMATTED_START_ADDRESS + (DPRAM_PDA2PHONE_FORMATTED_BUFFER_SIZE+4))
#define DPRAM_PDA2PHONE_RAW_HEAD_ADDRESS (DPRAM_PDA2PHONE_RAW_START_ADDRESS)
#define DPRAM_PDA2PHONE_RAW_TAIL_ADDRESS (DPRAM_PDA2PHONE_RAW_START_ADDRESS + 2)
#define DPRAM_PDA2PHONE_RAW_BUFFER_ADDRESS (DPRAM_PDA2PHONE_RAW_START_ADDRESS + 4)
//#define DPRAM_PDA2PHONE_RAW_BUFFER_SIZE 8186 // 0x1ff4
#define DPRAM_PDA2PHONE_RAW_BUFFER_SIZE 12272
#define DPRAM_PHONE2PDA_FORMATTED_START_ADDRESS (DPRAM_PDA2PHONE_RAW_START_ADDRESS + (DPRAM_PDA2PHONE_RAW_BUFFER_SIZE+4))
#define DPRAM_PHONE2PDA_FORMATTED_HEAD_ADDRESS (DPRAM_PHONE2PDA_FORMATTED_START_ADDRESS)
#define DPRAM_PHONE2PDA_FORMATTED_TAIL_ADDRESS (DPRAM_PHONE2PDA_FORMATTED_START_ADDRESS + 0x0002)
#define DPRAM_PHONE2PDA_FORMATTED_BUFFER_ADDRESS (DPRAM_PHONE2PDA_FORMATTED_START_ADDRESS + 0x0004)
//#define DPRAM_PHONE2PDA_FORMATTED_BUFFER_SIZE 8186 // 0x1ffc
#define DPRAM_PHONE2PDA_FORMATTED_BUFFER_SIZE 4092
#define DPRAM_PHONE2PDA_RAW_START_ADDRESS (DPRAM_PHONE2PDA_FORMATTED_START_ADDRESS + (DPRAM_PHONE2PDA_FORMATTED_BUFFER_SIZE+4))
#define DPRAM_PHONE2PDA_RAW_HEAD_ADDRESS (DPRAM_PHONE2PDA_RAW_START_ADDRESS)
#define DPRAM_PHONE2PDA_RAW_TAIL_ADDRESS (DPRAM_PHONE2PDA_RAW_START_ADDRESS + 0x0002)
#define DPRAM_PHONE2PDA_RAW_BUFFER_ADDRESS (DPRAM_PHONE2PDA_RAW_START_ADDRESS + 0x0004)
//#define DPRAM_PHONE2PDA_RAW_BUFFER_SIZE 8186 // 0x1ff4
#define DPRAM_PHONE2PDA_RAW_BUFFER_SIZE 12272
#if 0
/* indicator area*/
#define DPRAM_PDA2PHONE_INTERRUPT_ADDRESS (DPRAM_START_ADDRESS + 0x7FFC)
#define DPRAM_PHONE2PDA_INTERRUPT_ADDRESS (DPRAM_START_ADDRESS + 0x7FFE)
#endif
#define DPRAM_INTERRUPT_PORT_SIZE 2
#define DPRAM_START_ADDRESS_PHYS 0x30000000
#define DPRAM_SHARED_BANK 0x5000000
#define DPRAM_SHARED_BANK_SIZE 0x1000000
#define MAX_MODEM_IMG_SIZE 0x1000000 //16 * 1024 * 1024
#define MAX_DBL_IMG_SIZE 0x5000 //20 * 1024
#define DPRAM_SFR 0xFFF800
#define DPRAM_SMP DPRAM_SFR //semaphore
#define DPRAM_MBX_AB DPRAM_SFR + 0x20 //mailbox a -> b
#define DPRAM_MBX_BA DPRAM_SFR + 0x40 //mailbox b -> a
//#define DPRAM_CHECK_AB DPRAM_SFR + 0xA0 //check mailbox a -> b read
#define DPRAM_CHECK_BA DPRAM_SFR + 0xC0 //check mailbox b -> a read
#define DPRAM_PDA2PHONE_INTERRUPT_ADDRESS DPRAM_MBX_BA
#define DPRAM_PHONE2PDA_INTERRUPT_ADDRESS DPRAM_MBX_AB
#define PARTITION_ID_MODEM_IMG 0x08
//#define PARTITION_ID_MODEM_IMG 0x05
#define TRUE 1
#define FALSE 0
/*
* interrupt masks.
*/
#define INT_MASK_VALID 0x0080
#define INT_MASK_COMMAND 0x0040
#define INT_MASK_REQ_ACK_F 0x0020
#define INT_MASK_REQ_ACK_R 0x0010
#define INT_MASK_RES_ACK_F 0x0008
#define INT_MASK_RES_ACK_R 0x0004
#define INT_MASK_SEND_F 0x0002
#define INT_MASK_SEND_R 0x0001
#define INT_MASK_CMD_INIT_START 0x0001
#define INT_MASK_CMD_INIT_END 0x0002
#define INT_MASK_CMD_REQ_ACTIVE 0x0003
#define INT_MASK_CMD_RES_ACTIVE 0x0004
#define INT_MASK_CMD_REQ_TIME_SYNC 0x0005
#define INT_MASK_CMD_PHONE_START 0x0008
#define INT_MASK_CMD_ERR_DISPLAY 0x0009
#define INT_MASK_CMD_PHONE_DEEP_SLEEP 0x000A
#define INT_MASK_CMD_NV_REBUILDING 0x000B
#define INT_MASK_CMD_EMER_DOWN 0x000C
#define INT_MASK_CMD_SMP_REQ 0x000D
#define INT_MASK_CMD_SMP_REP 0x000E
#define INT_COMMAND(x) (INT_MASK_VALID | INT_MASK_COMMAND | x)
#define INT_NON_COMMAND(x) (INT_MASK_VALID | x)
#define FORMATTED_INDEX 0
#define RAW_INDEX 1
#define MAX_INDEX 2
/* ioctl command definitions. */
#define IOC_MZ_MAGIC ('o')
#define DPRAM_PHONE_POWON _IO(IOC_MZ_MAGIC, 0xd0)
#define DPRAM_PHONEIMG_LOAD _IO(IOC_MZ_MAGIC, 0xd1)
#define DPRAM_NVDATA_LOAD _IO(IOC_MZ_MAGIC, 0xd2)
#define DPRAM_PHONE_BOOTSTART _IO(IOC_MZ_MAGIC, 0xd3)
struct _param_nv {
unsigned char *addr;
unsigned int size;
};
struct _param_em {
unsigned int offset;
unsigned char *addr;
unsigned int size;
int rw;
};
#if 1
#define IOC_SEC_MAGIC (0xf0)
#define DPRAM_PHONE_ON _IO(IOC_SEC_MAGIC, 0xc0)
#define DPRAM_PHONE_OFF _IO(IOC_SEC_MAGIC, 0xc1)
#define DPRAM_PHONE_GETSTATUS _IOR(IOC_SEC_MAGIC, 0xc2, unsigned int)
//#define DPRAM_PHONE_MDUMP _IO(IOC_SEC_MAGIC, 0xc3)
//#define DPRAM_PHONE_BATTERY _IO(IOC_SEC_MAGIC, 0xc4)
#define DPRAM_PHONE_RESET _IO(IOC_SEC_MAGIC, 0xc5)
#define DPRAM_PHONE_RAMDUMP_ON _IO(IOC_SEC_MAGIC, 0xc6)
#define DPRAM_PHONE_RAMDUMP_OFF _IO(IOC_SEC_MAGIC, 0xc7)
#define DPRAM_EXTRA_MEM_RW _IOWR(IOC_SEC_MAGIC, 0xc8, unsigned long)
#else
#define IOC_SEC_MAGIC (0xf0)
#define DPRAM_PHONE_ON _IO(IOC_SEC_MAGIC, 0xc0)
#define DPRAM_PHONE_GETSTATUS _IOR(IOC_MZ_MAGIC, 0xc1, unsigned int)
//#define DPRAM_PHONE_OFF _IO(IOC_MZ_MAGIC, 0xd3)
//#define DPRAM_PHONE_ON _IO(IOC_MZ_MAGIC, 0xd3)
//#define DPRAM_PHONE_RESET _IO(IOC_MZ_MAGIC, 0xd5)
#define DPRAM_MEM_RW _IOWR(IOC_MZ_MAGIC, 0xd6, unsigned long)
#endif
/*
* structure definitions.
*/
typedef struct dpram_serial {
/* pointer to the tty for this device */
struct tty_struct *tty;
/* number of times this port has been opened */
int open_count;
/* locks this structure */
struct semaphore sem;
} dpram_serial_t;
typedef struct dpram_device {
/* DPRAM memory addresses */
unsigned long in_head_addr;
unsigned long in_tail_addr;
unsigned long in_buff_addr;
unsigned long in_buff_size;
unsigned long out_head_addr;
unsigned long out_tail_addr;
unsigned long out_buff_addr;
unsigned long out_buff_size;
unsigned int in_head_saved;
unsigned int in_tail_saved;
unsigned int out_head_saved;
unsigned int out_tail_saved;
u_int16_t mask_req_ack;
u_int16_t mask_res_ack;
u_int16_t mask_send;
dpram_serial_t serial;
} dpram_device_t;
typedef struct dpram_tasklet_data {
dpram_device_t *device;
u_int16_t non_cmd;
} dpram_tasklet_data_t;
struct _mem_param {
unsigned short addr;
unsigned long data;
int dir;
};
/* TODO: add more definitions */
#endif /* __DPRAM_H__ */
|