Project

General

Profile

Qualcomm Kernel » History » Version 11

laforge, 12/19/2016 03:15 PM

1 6 laforge
{{>toc}}
2
3 1 laforge
h1. Qualcomm Kernel
4
5
Random notes about the Qualcomm Kernel as used on the MDM9615
6
7
h2. diag
8
9
h3. diag forwarding
10
11
<pre>
12
drivers/char/diag/diagfwd.[ch]
13
drivers/usb/gadget/f_diag.[ch]
14
drivers/usb/misc/diag_bridge.c
15
</pre>
16
17
* the usb diag gadget handles diag packet read/write over usb
18
* issues events like USB_DIAG_READ_DONE
19
* picked up by diagfwd.c
20
** can forward diag requests via SMD shared memory to other processors
21
22
h3. diag char
23
24 6 laforge
The kernel exports a /dev/diag char device which userspce processes can
25
use to register/listen for DIAG events from the system, or actually
26
register a DIAG 'subsystem' themselves which can then be controlled from
27
QXDM.
28
29 1 laforge
<pre>
30
drivers/char/diag/diagchar_core.c
31
</pre>
32
33
* ioctl()s for diag configuration
34
* supports several concurrent diag clients
35
* diag logging can be directed to USB/HSIC, character device and more
36
** {USB,CALLBACK,MEMORY_DEVICE,UART,NO_LOGGING}_MODE
37
38 5 laforge
drivers/char/diag/diag_dci.c
39 1 laforge
40
* DCI table is a routing table where pid/sockets can register for a
41
  given DCI.  socket close/cleanup code releases all DCI routes for
42
  that socket.
43
44 7 laforge
h4. DIAG_IOCTL_COMMAND_REG
45
46
* Register a new DIAG command so it can be used from the outside world (QXDM)
47
* use 'struct diag_cmd_reg_entry_t' per command
48
* driver keeps a driver->cmd_reg_list of registered commands
49
50
h4. DIAG_IOCTL_COMMAND_DEREG
51
52
* unregister debug command
53
54
h4. DIAG_IOCTL_GET_DELAYED_RSP_ID
55
56
h4. DIAG_IOCTL_DCI_REG
57
58
h4. DIAG_IOCTL_DCI_DEINIT
59
60
h4. DIAG_IOCTL_DCI_SUPPORT
61
62
h4. DIAG_IOCTL_DCI_HEALTH_STATS
63
64
h4. DIAG_IOCTL_DCI_LOG_STATUS
65
66
h4. DIAG_IOCTL_DCI_EVENT_STATUS
67
68
h4. DIAG_IOCTL_DCI_CLEAR_LOGS
69
70
h4. DIAG_IOCTL_DCI_CLEAR_EVENTS
71
72
h4. DIAG_IOCTL_LSM_DEINIT
73
74
h4. DIAG_IOCTL_SWITCH_LOGGING
75
76
* switch between USB and shared-memory diag
77
* 
78
79
h4. DIAG_IOCTL_REMOTE_DEV
80
81
h4. DIAG_IOCTL_VOTE_REAL_TIME
82
83
h4. DIAG_IOCTL_GET_REAL_TIME
84
85
h4. DIAG_IOCTL_PERIPHERAL_BUF_CONFIG
86
87
h4. DIAG_IOCTL_PERIPHERAL_BUF_DRAIN
88
89
h4. DIAG_IOCTL_REGISTER_CALLBACK
90
91
* doen't really do anything but checking arguments ?!?
92
93
h4. DIAG_IOCTL_HDLC_TOGGLE
94
95
enable or disable HDLC framing of /dev/diag
96 6 laforge
97 1 laforge
h2. SMD (shared memory)
98
99
* SMD sub-systems:
100
** Modem (assumed to be hexagon with modem firmware?)
101
** Q6 (formerly known as LPASS == Low Power Audio SubSystem)
102
** DSPS
103
** WCNSS (Wireless Connectivity Sub System) aka 'riva'
104
** RPM (Resource Power Manager)
105
* inter-processor-interrupts for various 'edges'
106
107
h3. core driver
108
109
* arch/arm/mach-msm/smd.c
110
111
h4. api
112 4 laforge
113 1 laforge
* smd_open()
114
* smd_close()
115
* smd_write*()
116
* smd_read*()
117
* smsm_*()
118
119 3 laforge
h3. MSM IPC socket
120 1 laforge
121
* arch/arm/mach-msm/ipc_socket.c
122
* AF_MSM_IPC
123
124 3 laforge
125
h3. packet ports
126 1 laforge
127
* Some kind of packet oriented interface towards the SMD
128
* msm_smd_pkt.c contains driver
129
** smdpkt0..7+smd22 devices, 2048 byte buffer
130
** open/release/read/write/poll syscalls implemented
131 10 laforge
132
h3. available SMD devices
133
134
From an EC25:
135
<pre>
136
Primary allocation table:
137
root@mdm9607-perf:~# cat /sys/kernel/debug/smd/ch
138
ID|CHANNEL NAME       |T|PROC |STATE  |FIFO SZ|RDPTR  |WRPTR  |FLAGS   |DATAPEN
139
-------------------------------------------------------------------------------
140
 4|rpm_requests       |P|APPS |OPENED |0x00400|0x001E0|0x001E0|DCCiwRsB|0x00000
141
  |                   | |RPM  |OPENED |0x00400|0x00118|0x00118|DCCiwrsB|0x00000
142
-------------------------------------------------------------------------------
143
 5|rpm_requests       |P|MDMSW| Access Restricted
144
  |                   | |RPM  | Access Restricted
145
-------------------------------------------------------------------------------
146
 6|rpm_requests       |P|WCNSS| Access Restricted
147
  |                   | |RPM  | Access Restricted
148
-------------------------------------------------------------------------------
149
 7|rpm_requests       |P|TZ   | Access Restricted
150
  |                   | |RPM  | Access Restricted
151
-------------------------------------------------------------------------------
152
 8|rpm_requests       |P|ADSP | Access Restricted
153
  |                   | |RPM  | Access Restricted
154
-------------------------------------------------------------------------------
155
156
157
APPS <-> MDMSW Primary allocation table:
158
ID|CHANNEL NAME       |T|PROC |STATE  |FIFO SZ|RDPTR  |WRPTR  |FLAGS   |DATAPEN
159
-------------------------------------------------------------------------------
160
 0|DS                 |S|APPS |OPENED |0x02000|0x00000|0x00000|dcCiwrsb|0x00000
161
  |                   | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000
162
-------------------------------------------------------------------------------
163
 1|IPCRTR             |P|APPS |OPENED |0x02000|0x012E4|0x012E4|DCCiwrsB|0x00000
164
  |                   | |MDMSW|OPENED |0x02000|0x011F8|0x011F8|DCCiwrsB|0x00000
165
-------------------------------------------------------------------------------
166
 2|SSM_RTR_MODEM_APPS |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000
167
  |                   | |MDMSW|OPENING|0x02000|0x00000|0x00000|DCCiwrSb|0x00000
168
-------------------------------------------------------------------------------
169
 3|DIAG_2_CMD         |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000
170
  |                   | |MDMSW|OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000
171
-------------------------------------------------------------------------------
172
 4|DIAG_2             |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000
173
  |                   | |MDMSW|OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000
174
-------------------------------------------------------------------------------
175
 5|DIAG_CNTL          |P|APPS |OPENED |0x02000|0x00062|0x00062|DCCiwrsb|0x00000
176
  |                   | |MDMSW|OPENED |0x02000|0x007F5|0x007F5|DCCiwrsB|0x00000
177
-------------------------------------------------------------------------------
178
 6|DIAG_CMD           |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000
179
  |                   | |MDMSW|OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000
180
-------------------------------------------------------------------------------
181
 7|DIAG               |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsb|0x00000
182
  |                   | |MDMSW|OPENED |0x02000|0x00026|0x00026|DCCiwrsB|0x00000
183
-------------------------------------------------------------------------------
184
 8|apr_audio_svc      |P|APPS |OPENED |0x02000|0x002F0|0x002F0|DCCiwrsB|0x00000
185
  |                   | |MDMSW|OPENED |0x02000|0x00248|0x00248|DCCiwrsB|0x00000
186
-------------------------------------------------------------------------------
187
 9|apr_apps2          |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000
188
  |                   | |MDMSW|OPENING|0x02000|0x00000|0x00000|DCCiwrSb|0x00000
189
-------------------------------------------------------------------------------
190
10|DATA1              |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsB|0x00000
191
  |                   | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000
192
-------------------------------------------------------------------------------
193
11|DATA2              |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000
194
  |                   | |MDMSW|OPENING|0x02000|0x00000|0x00000|dCciwrSb|0x00000
195
-------------------------------------------------------------------------------
196
12|DATA3              |P|APPS |OPENED |0x02000|0x00000|0x00000|dcCiwrsb|0x00000
197
  |                   | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000
198
-------------------------------------------------------------------------------
199
13|DATA4              |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsB|0x00000
200
  |                   | |MDMSW|OPENED |0x02000|0x00000|0x00000|dCciwrsb|0x00000
201
-------------------------------------------------------------------------------
202
14|DATA11             |S|APPS |OPENED |0x02000|0x00089|0x00089|dcCiwRsb|0x00000
203
  |                   | |MDMSW|OPENED |0x02000|0x0012B|0x0012B|dCciwrsB|0x00000
204
-------------------------------------------------------------------------------
205
15|DATA40             |P|APPS |CLOSED |0x02000|0x00000|0x00000|dcciwrsb|0x00000
206
  |                   | |MDMSW|OPENING|0x02000|0x00000|0x00000|dcciwrSb|0x00000
207
-------------------------------------------------------------------------------
208
16|DATA5_CNTL         |P|APPS |CLOSED |0x00400|0x00000|0x00000|dcciwrsb|0x00000
209
  |                   | |MDMSW|OPENING|0x00400|0x00000|0x00000|DCCiwrSb|0x00000
210
-------------------------------------------------------------------------------
211
17|DATA40_CNTL        |P|APPS |OPENED |0x02000|0x00000|0x00000|DCCiwrsB|0x00000
212
  |                   | |MDMSW|OPENED |0x02000|0x00100|0x00100|DCCiwrsB|0x00000
213
-------------------------------------------------------------------------------
214
</pre>
215 6 laforge
216
h2. smem_log
217
218
This is some kidn of high speed shared memory based event log to which all processors can log events.
219
220
Userspace applications can use write() to @/dev/smem_log@ to add log entries.
221
222
Qualcomm uses a proprietary minimal shim layer offering SMEM_LOG_EVENT and SMEM_LOG_EVENT6 macros
223
that can be used to write events with an event ID plus three data words or six data words, respectively.
224
225
The shared memory log can be read from linux userspace via debugfs, see the devices in @/sys/kernel/debug/smem_log@
226
and simply use @cat@ on them. You will get lines like
227
<pre>
228
MODM: 3982377401 000d0000: 00000001: 03000019 01000028 01000015 53505041 00000061 5f696d71
229
MODM: 3982378159      QCSI: 00000004: 00040029 00240015 00000003 00000001 0000002b 00000000
230
MODM: 3982378619 000d0000: 00000001: 03000019 0100002b 01000015 53505041 00000061 5f696d71
231
APPS: 3982397356      QCCI: 00000005: 0004001d 0024000e 00000003 00000003 00000019 00000000
232
APPS: 3982400571      QCCI: 00000005: 00040029 0024000e 00000003 00000003 00000019 00000000
233
MODM: 1841235211      QCSI: 00000004: 0004001e 0024001c 00000003 00000001 00000028 00000000
234
MODM: 1841236665 000d0000: 00000001: 03000019 01000028 0101001c 53505041 00000061 5f696d71
235
MODM: 1841241411      QCSI: 00000004: 0004002a 0024001c 00000003 00000001 0000002b 00000000
236
MODM: 1841242246 000d0000: 00000001: 03000019 0100002b 0100001c 53505041 00000061 5f696d71
237
MODM: 1841243796      QCSI: 00000004: 0004002b 00660019 00000003 00000001 0000002b 00000000
238
MODM: 1841244286 000d0000: 00000001: 03000019 0100002b 01000019 53505041 00000061 5f696d71
239
APPS: 1841255456      QCCI: 00000005: 0004001e 00240015 00000003 00000003 00000019 00000000
240
MODM: 1841255335 000d0000: 00000002: 0100ffff 0300ffff 07000014 53505041 0000016c 74646d73
241
MODM: 1841255828 000d0000: 00000702: 00000001 00000028 00000007
242
APPS: 1841261430      QCCI: 00000005: 0004002a 00240015 00000003 00000003 00000019 00000000
243
</pre>
244 8 laforge
245
h2. rmnet
246
247
"remote network" ?
248
* consists of control channel and data channel
249
* data channel carries IP data
250
* control channel carries QMI messages
251
252
* drivers/net/ethernet/msm/msm_rmnet_bam.c
253
** ioctl() to set ethernet or rawip (RMNET_IOCTL_SET_LLP_ETHERNET, RMNET_IOCTL_SET_LLP_IP, RMNET_IOCTL_GET_LLP), initial boot time config is ETHERNET
254
** use msm_bam_dmux_open() to attach
255
** use RMNET_IOCTL_GET_EPID to get the BAM_DMUX endpoint id
256
257
h2. bam (Bus Access Manager/Module)
258
259
* The Bus Access Manager/Module (BAM) can be
260
  considered as a distributed data mover (DM)
261
* some kind of DMA controller/engine
262
* A number of the on-chip devices have their own BAM DMA controller
263
  and use it to move data between system memory and peripherals or
264
  between two peripherals.
265
266
Files:
267
<pre>
268
./drivers/dma/qcom_bam_dma.c
269
./drivers/net/ethernet/msm/msm_rmnet_bam.c
270
./drivers/platform/msm/sps/bam.c
271
./drivers/platform/msm/sps/sps_bam.c
272
./drivers/platform/msm/usb_bam.c
273
</pre>
274
275
* channels (BAM_DMUX_)
276
** RMNET_0...7
277
** USB_RMNET_0
278
** DATA_REV_RMNET_0..8
279
** USB_DPL
280
281
seem to be be based on dmux ./drivers/soc/qcom/bam_dmux.c
282
283
h2. IPA (Internet Packet Accelerator)
284
285
Internet Packet Accelerator (IPA) is a programmable protocol
286
processor HW block. It is designed to support generic HW processing
287
of UL/DL IP packets for various use cases independent of radio
288
technology.
289
290
See drivers/platform/msm/ipa/
291
292 11 laforge
http://www.sumobrain.com/patents/wipo/Accelerator/WO2013063791A1.pdf
293
294
295 8 laforge
h2. bam2bam
296
297
maybe soem kind of direct connection between two peripherals by means of the BAM?
298
299
h2. Android USB Gadget
300
301
see [[Android_USB_Gadget]]
302 9 laforge
303
h2. IPC Logging
304
305
see [[IPC_Logging]]
Add picture from clipboard (Maximum size: 48.8 MB)