Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/soc/fsl/imx-pcm-rpmsg.h
26427 views
1
/* SPDX-License-Identifier: GPL-2.0+ */
2
/*
3
* Copyright 2017-2021 NXP
4
*
5
******************************************************************************
6
* Communication stack of audio with rpmsg
7
******************************************************************************
8
* Packet structure:
9
* A SRTM message consists of a 10 bytes header followed by 0~N bytes of data
10
*
11
* +---------------+-------------------------------+
12
* | | Content |
13
* +---------------+-------------------------------+
14
* | Byte Offset | 7 6 5 4 3 2 1 0 |
15
* +---------------+---+---+---+---+---+---+---+---+
16
* | 0 | Category |
17
* +---------------+---+---+---+---+---+---+---+---+
18
* | 1 ~ 2 | Version |
19
* +---------------+---+---+---+---+---+---+---+---+
20
* | 3 | Type |
21
* +---------------+---+---+---+---+---+---+---+---+
22
* | 4 | Command |
23
* +---------------+---+---+---+---+---+---+---+---+
24
* | 5 | Reserved0 |
25
* +---------------+---+---+---+---+---+---+---+---+
26
* | 6 | Reserved1 |
27
* +---------------+---+---+---+---+---+---+---+---+
28
* | 7 | Reserved2 |
29
* +---------------+---+---+---+---+---+---+---+---+
30
* | 8 | Reserved3 |
31
* +---------------+---+---+---+---+---+---+---+---+
32
* | 9 | Reserved4 |
33
* +---------------+---+---+---+---+---+---+---+---+
34
* | 10 | DATA 0 |
35
* +---------------+---+---+---+---+---+---+---+---+
36
* : : : : : : : : : : : : :
37
* +---------------+---+---+---+---+---+---+---+---+
38
* | N + 10 - 1 | DATA N-1 |
39
* +---------------+---+---+---+---+---+---+---+---+
40
*
41
* +----------+------------+------------------------------------------------+
42
* | Field | Byte | |
43
* +----------+------------+------------------------------------------------+
44
* | Category | 0 | The destination category. |
45
* +----------+------------+------------------------------------------------+
46
* | Version | 1 ~ 2 | The category version of the sender of the |
47
* | | | packet. |
48
* | | | The first byte represent the major version of |
49
* | | | the packet.The second byte represent the minor |
50
* | | | version of the packet. |
51
* +----------+------------+------------------------------------------------+
52
* | Type | 3 | The message type of current message packet. |
53
* +----------+------------+------------------------------------------------+
54
* | Command | 4 | The command byte sent to remote processor/SoC. |
55
* +----------+------------+------------------------------------------------+
56
* | Reserved | 5 ~ 9 | Reserved field for future extension. |
57
* +----------+------------+------------------------------------------------+
58
* | Data | N | The data payload of the message packet. |
59
* +----------+------------+------------------------------------------------+
60
*
61
* Audio control:
62
* SRTM Audio Control Category Request Command Table:
63
* +----------+---------+------+---------+-------------------------------+-----------------------+
64
* | Category | Version | Type | Command | Data | Function |
65
* +----------+---------+------+---------+-------------------------------+-----------------------+
66
* | 0x03 | 0x0100 | 0x00 | 0x00 | Data[0]: Audio Device Index | Open a TX Instance. |
67
* | | | | | Data[1]: format | |
68
* | | | | | Data[2]: channels | |
69
* | | | | | Data[3-6]: samplerate | |
70
* | | | | | Data[7-10]: buffer_addr | |
71
* | | | | | Data[11-14]: buffer_size | |
72
* | | | | | Data[15-18]: period_size | |
73
* | | | | | Data[19-22]: buffer_tail | |
74
* +----------+---------+------+---------+-------------------------------+-----------------------+
75
* | 0x03 | 0x0100 | 0x00 | 0x01 | Data[0]: Audio Device Index | Start a TX Instance. |
76
* | | | | | Same as above command | |
77
* +----------+---------+------+---------+-------------------------------+-----------------------+
78
* | 0x03 | 0x0100 | 0x00 | 0x02 | Data[0]: Audio Device Index | Pause a TX Instance. |
79
* | | | | | Same as above command | |
80
* +----------+---------+------+---------+-------------------------------+-----------------------+
81
* | 0x03 | 0x0100 | 0x00 | 0x03 | Data[0]: Audio Device Index | Resume a TX Instance. |
82
* +----------+---------+------+---------+-------------------------------+-----------------------+
83
* | 0x03 | 0x0100 | 0x00 | 0x04 | Data[0]: Audio Device Index | Stop a TX Instance. |
84
* +----------+---------+------+---------+-------------------------------+-----------------------+
85
* | 0x03 | 0x0100 | 0x00 | 0x05 | Data[0]: Audio Device Index | Close a TX Instance. |
86
* +----------+---------+------+---------+-------------------------------+-----------------------+
87
* | 0x03 | 0x0100 | 0x00 | 0x06 | Data[0]: Audio Device Index | Set Parameters for |
88
* | | | | | Data[1]: format | a TX Instance. |
89
* | | | | | Data[2]: channels | |
90
* | | | | | Data[3-6]: samplerate | |
91
* | | | | | Data[7-22]: reserved | |
92
* +----------+---------+------+---------+-------------------------------+-----------------------+
93
* | 0x03 | 0x0100 | 0x00 | 0x07 | Data[0]: Audio Device Index | Set TX Buffer. |
94
* | | | | | Data[1-6]: reserved | |
95
* | | | | | Data[7-10]: buffer_addr | |
96
* | | | | | Data[11-14]: buffer_size | |
97
* | | | | | Data[15-18]: period_size | |
98
* | | | | | Data[19-22]: buffer_tail | |
99
* +----------+---------+------+---------+-------------------------------+-----------------------+
100
* | 0x03 | 0x0100 | 0x00 | 0x08 | Data[0]: Audio Device Index | Suspend a TX Instance |
101
* +----------+---------+------+---------+-------------------------------+-----------------------+
102
* | 0x03 | 0x0100 | 0x00 | 0x09 | Data[0]: Audio Device Index | Resume a TX Instance. |
103
* | | | | | Data[1]: format | |
104
* | | | | | Data[2]: channels | |
105
* | | | | | Data[3-6]: samplerate | |
106
* | | | | | Data[7-10]: buffer_addr | |
107
* | | | | | Data[11-14]: buffer_size | |
108
* | | | | | Data[15-18]: period_size | |
109
* | | | | | Data[19-22]: buffer_tail | |
110
* +----------+---------+------+---------+-------------------------------+-----------------------+
111
* | 0x03 | 0x0100 | 0x00 | 0x0A | Data[0]: Audio Device Index | Open a RX Instance. |
112
* +----------+---------+------+---------+-------------------------------+-----------------------+
113
* | 0x03 | 0x0100 | 0x00 | 0x0B | Data[0]: Audio Device Index | Start a RX Instance. |
114
* +----------+---------+------+---------+-------------------------------+-----------------------+
115
* | 0x03 | 0x0100 | 0x00 | 0x0C | Data[0]: Audio Device Index | Pause a RX Instance. |
116
* +----------+---------+------+---------+-------------------------------+-----------------------+
117
* | 0x03 | 0x0100 | 0x00 | 0x0D | Data[0]: Audio Device Index | Resume a RX Instance. |
118
* +----------+---------+------+---------+-------------------------------+-----------------------+
119
* | 0x03 | 0x0100 | 0x00 | 0x0E | Data[0]: Audio Device Index | Stop a RX Instance. |
120
* +----------+---------+------+---------+-------------------------------+-----------------------+
121
* | 0x03 | 0x0100 | 0x00 | 0x0F | Data[0]: Audio Device Index | Close a RX Instance. |
122
* +----------+---------+------+---------+-------------------------------+-----------------------+
123
* | 0x03 | 0x0100 | 0x00 | 0x10 | Data[0]: Audio Device Index | Set Parameters for |
124
* | | | | | Data[1]: format | a RX Instance. |
125
* | | | | | Data[2]: channels | |
126
* | | | | | Data[3-6]: samplerate | |
127
* | | | | | Data[7-22]: reserved | |
128
* +----------+---------+------+---------+-------------------------------+-----------------------+
129
* | 0x03 | 0x0100 | 0x00 | 0x11 | Data[0]: Audio Device Index | Set RX Buffer. |
130
* | | | | | Data[1-6]: reserved | |
131
* | | | | | Data[7-10]: buffer_addr | |
132
* | | | | | Data[11-14]: buffer_size | |
133
* | | | | | Data[15-18]: period_size | |
134
* | | | | | Data[19-22]: buffer_tail | |
135
* +----------+---------+------+---------+-------------------------------+-----------------------+
136
* | 0x03 | 0x0100 | 0x00 | 0x12 | Data[0]: Audio Device Index | Suspend a RX Instance.|
137
* +----------+---------+------+---------+-------------------------------+-----------------------+
138
* | 0x03 | 0x0100 | 0x00 | 0x13 | Data[0]: Audio Device Index | Resume a RX Instance. |
139
* | | | | | Data[1]: format | |
140
* | | | | | Data[2]: channels | |
141
* | | | | | Data[3-6]: samplerate | |
142
* | | | | | Data[7-10]: buffer_addr | |
143
* | | | | | Data[11-14]: buffer_size | |
144
* | | | | | Data[15-18]: period_size | |
145
* | | | | | Data[19-22]: buffer_tail | |
146
* +----------+---------+------+---------+-------------------------------+-----------------------+
147
* | 0x03 | 0x0100 | 0x00 | 0x14 | Data[0]: Audio Device Index | Set register value |
148
* | | | | | Data[1-6]: reserved | to codec |
149
* | | | | | Data[7-10]: register | |
150
* | | | | | Data[11-14]: value | |
151
* | | | | | Data[15-22]: reserved | |
152
* +----------+---------+------+---------+-------------------------------+-----------------------+
153
* | 0x03 | 0x0100 | 0x00 | 0x15 | Data[0]: Audio Device Index | Get register value |
154
* | | | | | Data[1-6]: reserved | from codec |
155
* | | | | | Data[7-10]: register | |
156
* | | | | | Data[11-22]: reserved | |
157
* +----------+---------+------+---------+-------------------------------+-----------------------+
158
* Note 1: See <List of Sample Format> for available value of
159
* Sample Format;
160
* Note 2: See <List of Audio Channels> for available value of Channels;
161
* Note 3: Sample Rate of Set Parameters for an Audio TX Instance
162
* Command and Set Parameters for an Audio RX Instance Command is
163
* in little-endian format.
164
*
165
* SRTM Audio Control Category Response Command Table:
166
* +----------+---------+------+---------+-------------------------------+-----------------------+
167
* | Category | Version | Type | Command | Data | Function |
168
* +----------+---------+------+---------+-------------------------------+-----------------------+
169
* | 0x03 | 0x0100 | 0x01 | 0x00 | Data[0]: Audio Device Index | Reply for Open |
170
* | | | | | Data[1]: Return code | a TX Instance |
171
* +----------+---------+------+---------+-------------------------------+-----------------------+
172
* | 0x03 | 0x0100 | 0x01 | 0x01 | Data[0]: Audio Device Index | Reply for Start |
173
* | | | | | Data[1]: Return code | a TX Instance |
174
* +----------+---------+------+---------+-------------------------------+-----------------------+
175
* | 0x03 | 0x0100 | 0x01 | 0x02 | Data[0]: Audio Device Index | Reply for Pause |
176
* | | | | | Data[1]: Return code | a TX Instance |
177
* +----------+---------+------+---------+-------------------------------+-----------------------+
178
* | 0x03 | 0x0100 | 0x01 | 0x03 | Data[0]: Audio Device Index | Reply for Resume |
179
* | | | | | Data[1]: Return code | a TX Instance |
180
* +----------+---------+------+---------+-------------------------------+-----------------------+
181
* | 0x03 | 0x0100 | 0x01 | 0x04 | Data[0]: Audio Device Index | Reply for Stop |
182
* | | | | | Data[1]: Return code | a TX Instance |
183
* +----------+---------+------+---------+-------------------------------+-----------------------+
184
* | 0x03 | 0x0100 | 0x01 | 0x05 | Data[0]: Audio Device Index | Reply for Close |
185
* | | | | | Data[1]: Return code | a TX Instance |
186
* +----------+---------+------+---------+-------------------------------+-----------------------+
187
* | 0x03 | 0x0100 | 0x01 | 0x06 | Data[0]: Audio Device Index | Reply for Set Param |
188
* | | | | | Data[1]: Return code | for a TX Instance. |
189
* +----------+---------+------+---------+-------------------------------+-----------------------+
190
* | 0x03 | 0x0100 | 0x01 | 0x07 | Data[0]: Audio Device Index | Reply for Set |
191
* | | | | | Data[1]: Return code | TX Buffer |
192
* +----------+---------+------+---------+-------------------------------+-----------------------+
193
* | 0x03 | 0x0100 | 0x01 | 0x08 | Data[0]: Audio Device Index | Reply for Suspend |
194
* | | | | | Data[1]: Return code | a TX Instance |
195
* +----------+---------+------+---------+-------------------------------+-----------------------+
196
* | 0x03 | 0x0100 | 0x01 | 0x09 | Data[0]: Audio Device Index | Reply for Resume |
197
* | | | | | Data[1]: Return code | a TX Instance |
198
* +----------+---------+------+---------+-------------------------------+-----------------------+
199
* | 0x03 | 0x0100 | 0x01 | 0x0A | Data[0]: Audio Device Index | Reply for Open |
200
* | | | | | Data[1]: Return code | a TX Instance |
201
* +----------+---------+------+---------+-------------------------------+-----------------------+
202
* | 0x03 | 0x0100 | 0x01 | 0x0B | Data[0]: Audio Device Index | Reply for Start |
203
* | | | | | Data[1]: Return code | a TX Instance |
204
* +----------+---------+------+---------+-------------------------------+-----------------------+
205
* | 0x03 | 0x0100 | 0x01 | 0x0C | Data[0]: Audio Device Index | Reply for Pause |
206
* | | | | | Data[1]: Return code | a TX Instance |
207
* +----------+---------+------+---------+-------------------------------+-----------------------+
208
* | 0x03 | 0x0100 | 0x01 | 0x0D | Data[0]: Audio Device Index | Reply for Resume |
209
* | | | | | Data[1]: Return code | a RX Instance |
210
* +----------+---------+------+---------+-------------------------------+-----------------------+
211
* | 0x03 | 0x0100 | 0x01 | 0x0E | Data[0]: Audio Device Index | Reply for Stop |
212
* | | | | | Data[1]: Return code | a RX Instance |
213
* +----------+---------+------+---------+-------------------------------+-----------------------+
214
* | 0x03 | 0x0100 | 0x01 | 0x0F | Data[0]: Audio Device Index | Reply for Close |
215
* | | | | | Data[1]: Return code | a RX Instance |
216
* +----------+---------+------+---------+-------------------------------+-----------------------+
217
* | 0x03 | 0x0100 | 0x01 | 0x10 | Data[0]: Audio Device Index | Reply for Set Param |
218
* | | | | | Data[1]: Return code | for a RX Instance. |
219
* +----------+---------+------+---------+-------------------------------+-----------------------+
220
* | 0x03 | 0x0100 | 0x01 | 0x11 | Data[0]: Audio Device Index | Reply for Set |
221
* | | | | | Data[1]: Return code | RX Buffer |
222
* +----------+---------+------+---------+-------------------------------+-----------------------+
223
* | 0x03 | 0x0100 | 0x01 | 0x12 | Data[0]: Audio Device Index | Reply for Suspend |
224
* | | | | | Data[1]: Return code | a RX Instance |
225
* +----------+---------+------+---------+-------------------------------+-----------------------+
226
* | 0x03 | 0x0100 | 0x01 | 0x13 | Data[0]: Audio Device Index | Reply for Resume |
227
* | | | | | Data[1]: Return code | a RX Instance |
228
* +----------+---------+------+---------+-------------------------------+-----------------------+
229
* | 0x03 | 0x0100 | 0x01 | 0x14 | Data[0]: Audio Device Index | Reply for Set codec |
230
* | | | | | Data[1]: Return code | register value |
231
* +----------+---------+------+---------+-------------------------------+-----------------------+
232
* | 0x03 | 0x0100 | 0x01 | 0x15 | Data[0]: Audio Device Index | Reply for Get codec |
233
* | | | | | Data[1]: Return code | register value |
234
* | | | | | Data[2-6]: reserved | |
235
* | | | | | Data[7-10]: register | |
236
* | | | | | Data[11-14]: value | |
237
* | | | | | Data[15-22]: reserved | |
238
* +----------+---------+------+---------+-------------------------------+-----------------------+
239
*
240
* SRTM Audio Control Category Notification Command Table:
241
* +----------+---------+------+---------+-------------------------------+-----------------------+
242
* | Category | Version | Type | Command | Data | Function |
243
* +----------+---------+------+---------+-------------------------------+-----------------------+
244
* | 0x03 | 0x0100 | 0x02 | 0x00 | Data[0]: Audio Device Index | Notify one TX period |
245
* | | | | | | is finished |
246
* +----------+---------+------+---------+-------------------------------+-----------------------+
247
* | 0x03 | 0x0100 | 0x02 | 0x01 | Data[0]: Audio Device Index | Notify one RX period |
248
* | | | | | | is finished |
249
* +----------+---------+------+---------+-------------------------------+-----------------------+
250
*
251
* List of Sample Format:
252
* +------------------+-----------------------+
253
* | Sample Format | Description |
254
* +------------------+-----------------------+
255
* | 0x0 | S16_LE |
256
* +------------------+-----------------------+
257
* | 0x1 | S24_LE |
258
* +------------------+-----------------------+
259
*
260
* List of Audio Channels
261
* +------------------+-----------------------+
262
* | Audio Channel | Description |
263
* +------------------+-----------------------+
264
* | 0x0 | Left Channel |
265
* +------------------+-----------------------+
266
* | 0x1 | Right Channel |
267
* +------------------+---------------- ------+
268
* | 0x2 | Left & Right Channel |
269
* +------------------+-----------------------+
270
*
271
*/
272
273
#ifndef _IMX_PCM_RPMSG_H
274
#define _IMX_PCM_RPMSG_H
275
276
#include <linux/pm_qos.h>
277
#include <linux/interrupt.h>
278
#include <sound/dmaengine_pcm.h>
279
280
#define RPMSG_TIMEOUT 1000
281
282
/* RPMSG Command (TYPE A)*/
283
#define TX_OPEN 0x0
284
#define TX_START 0x1
285
#define TX_PAUSE 0x2
286
#define TX_RESTART 0x3
287
#define TX_TERMINATE 0x4
288
#define TX_CLOSE 0x5
289
#define TX_HW_PARAM 0x6
290
#define TX_BUFFER 0x7
291
#define TX_SUSPEND 0x8
292
#define TX_RESUME 0x9
293
294
#define RX_OPEN 0xA
295
#define RX_START 0xB
296
#define RX_PAUSE 0xC
297
#define RX_RESTART 0xD
298
#define RX_TERMINATE 0xE
299
#define RX_CLOSE 0xF
300
#define RX_HW_PARAM 0x10
301
#define RX_BUFFER 0x11
302
#define RX_SUSPEND 0x12
303
#define RX_RESUME 0x13
304
#define SET_CODEC_VALUE 0x14
305
#define GET_CODEC_VALUE 0x15
306
#define TX_POINTER 0x16
307
#define RX_POINTER 0x17
308
/* Total msg numver for type A */
309
#define MSG_TYPE_A_NUM 0x18
310
311
/* RPMSG Command (TYPE C)*/
312
#define TX_PERIOD_DONE 0x0
313
#define RX_PERIOD_DONE 0x1
314
/* Total msg numver for type C */
315
#define MSG_TYPE_C_NUM 0x2
316
317
#define MSG_MAX_NUM (MSG_TYPE_A_NUM + MSG_TYPE_C_NUM)
318
319
#define MSG_TYPE_A 0x0
320
#define MSG_TYPE_B 0x1
321
#define MSG_TYPE_C 0x2
322
323
#define RESP_NONE 0x0
324
#define RESP_NOT_ALLOWED 0x1
325
#define RESP_SUCCESS 0x2
326
#define RESP_FAILED 0x3
327
328
#define RPMSG_S16_LE 0x0
329
#define RPMSG_S24_LE 0x1
330
#define RPMSG_S32_LE 0x2
331
#define RPMSG_DSD_U16_LE 49 /* SNDRV_PCM_FORMAT_DSD_U16_LE */
332
#define RPMSG_DSD_U24_LE 0x4
333
#define RPMSG_DSD_U32_LE 50 /* SNDRV_PCM_FORMAT_DSD_U32_LE */
334
335
#define RPMSG_CH_LEFT 0x0
336
#define RPMSG_CH_RIGHT 0x1
337
#define RPMSG_CH_STEREO 0x2
338
339
#define WORK_MAX_NUM 0x30
340
341
/* Category define */
342
#define IMX_RMPSG_LIFECYCLE 1
343
#define IMX_RPMSG_PMIC 2
344
#define IMX_RPMSG_AUDIO 3
345
#define IMX_RPMSG_KEY 4
346
#define IMX_RPMSG_GPIO 5
347
#define IMX_RPMSG_RTC 6
348
#define IMX_RPMSG_SENSOR 7
349
350
/* rpmsg version */
351
#define IMX_RMPSG_MAJOR 1
352
#define IMX_RMPSG_MINOR 0
353
354
#define TX SNDRV_PCM_STREAM_PLAYBACK
355
#define RX SNDRV_PCM_STREAM_CAPTURE
356
357
/**
358
* struct rpmsg_head: rpmsg header structure
359
*
360
* @cate: category
361
* @major: major version
362
* @minor: minor version
363
* @type: message type (A/B/C)
364
* @cmd: message command
365
* @reserved: reserved space
366
*/
367
struct rpmsg_head {
368
u8 cate;
369
u8 major;
370
u8 minor;
371
u8 type;
372
u8 cmd;
373
u8 reserved[5];
374
} __packed;
375
376
/**
377
* struct param_s: sent rpmsg parameter
378
*
379
* @audioindex: audio instance index
380
* @format: audio format
381
* @channels: audio channel number
382
* @rate: sample rate
383
* @buffer_addr: dma buffer physical address or register for SET_CODEC_VALUE
384
* @buffer_size: dma buffer size or register value for SET_CODEC_VALUE
385
* @period_size: period size
386
* @buffer_tail: current period index
387
*/
388
struct param_s {
389
unsigned char audioindex;
390
unsigned char format;
391
unsigned char channels;
392
unsigned int rate;
393
unsigned int buffer_addr;
394
unsigned int buffer_size;
395
unsigned int period_size;
396
unsigned int buffer_tail;
397
} __packed;
398
399
/**
400
* struct param_s: send rpmsg parameter
401
*
402
* @audioindex: audio instance index
403
* @resp: response value
404
* @reserved1: reserved space
405
* @buffer_offset: the consumed offset of buffer
406
* @reg_addr: register addr of codec
407
* @reg_data: register value of codec
408
* @reserved2: reserved space
409
* @buffer_tail: current period index
410
*/
411
struct param_r {
412
unsigned char audioindex;
413
unsigned char resp;
414
unsigned char reserved1[1];
415
unsigned int buffer_offset;
416
unsigned int reg_addr;
417
unsigned int reg_data;
418
unsigned char reserved2[4];
419
unsigned int buffer_tail;
420
} __packed;
421
422
/* Struct of sent message */
423
struct rpmsg_s_msg {
424
struct rpmsg_head header;
425
struct param_s param;
426
};
427
428
/* Struct of received message */
429
struct rpmsg_r_msg {
430
struct rpmsg_head header;
431
struct param_r param;
432
};
433
434
/* Struct of rpmsg */
435
struct rpmsg_msg {
436
struct rpmsg_s_msg s_msg;
437
struct rpmsg_r_msg r_msg;
438
};
439
440
/* Struct of rpmsg for workqueue */
441
struct work_of_rpmsg {
442
struct rpmsg_info *info;
443
/* Sent msg for each work */
444
struct rpmsg_msg msg;
445
struct work_struct work;
446
};
447
448
/* Struct of timer */
449
struct stream_timer {
450
struct timer_list timer;
451
struct rpmsg_info *info;
452
struct snd_pcm_substream *substream;
453
};
454
455
typedef void (*dma_callback)(void *arg);
456
457
/**
458
* struct rpmsg_info: rpmsg audio information
459
*
460
* @rpdev: pointer of rpmsg_device
461
* @dev: pointer for imx_pcm_rpmsg device
462
* @cmd_complete: command is finished
463
* @pm_qos_req: request of pm qos
464
* @r_msg: received rpmsg
465
* @msg: array of rpmsg
466
* @notify: notification msg (type C) for TX & RX
467
* @notify_updated: notification flag for TX & RX
468
* @rpmsg_wq: rpmsg workqueue
469
* @work_list: array of work list for workqueue
470
* @work_write_index: write index of work list
471
* @work_read_index: read index of work list
472
* @msg_drop_count: counter of dropped msg for TX & RX
473
* @num_period: period number for TX & RX
474
* @callback_param: parameter for period elapse callback for TX & RX
475
* @callback: period elapse callback for TX & RX
476
* @send_message: function pointer for send message
477
* @lock: spin lock for TX & RX
478
* @wq_lock: lock for work queue
479
* @msg_lock: lock for send message
480
* @stream_timer: timer for tigger workqueue
481
*/
482
struct rpmsg_info {
483
struct rpmsg_device *rpdev;
484
struct device *dev;
485
struct completion cmd_complete;
486
struct pm_qos_request pm_qos_req;
487
488
/* Received msg (global) */
489
struct rpmsg_r_msg r_msg;
490
struct rpmsg_msg msg[MSG_MAX_NUM];
491
/* period done */
492
struct rpmsg_msg notify[2];
493
bool notify_updated[2];
494
495
struct workqueue_struct *rpmsg_wq;
496
struct work_of_rpmsg work_list[WORK_MAX_NUM];
497
int work_write_index;
498
int work_read_index;
499
int msg_drop_count[2];
500
int num_period[2];
501
void *callback_param[2];
502
dma_callback callback[2];
503
int (*send_message)(struct rpmsg_msg *msg, struct rpmsg_info *info);
504
spinlock_t lock[2]; /* spin lock for resource protection */
505
spinlock_t wq_lock; /* spin lock for resource protection */
506
struct mutex msg_lock; /* mutex for resource protection */
507
struct stream_timer stream_timer[2];
508
};
509
510
#define IMX_PCM_DRV_NAME "imx_pcm_rpmsg"
511
512
#endif /* IMX_PCM_RPMSG_H */
513
514