cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

imx-pcm-rpmsg.h (29019B)


      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 */
    367struct 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 */
    388struct 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 */
    411struct 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 */
    423struct rpmsg_s_msg {
    424	struct rpmsg_head header;
    425	struct param_s    param;
    426};
    427
    428/* Struct of received message */
    429struct rpmsg_r_msg {
    430	struct rpmsg_head header;
    431	struct param_r    param;
    432};
    433
    434/* Struct of rpmsg */
    435struct rpmsg_msg {
    436	struct rpmsg_s_msg  s_msg;
    437	struct rpmsg_r_msg  r_msg;
    438};
    439
    440/* Struct of rpmsg for workqueue */
    441struct 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 */
    449struct stream_timer {
    450	struct timer_list   timer;
    451	struct rpmsg_info   *info;
    452	struct snd_pcm_substream *substream;
    453};
    454
    455typedef 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 */
    482struct 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 */