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

cs46xx_dsp_spos.h (5269B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 *  The driver for the Cirrus Logic's Sound Fusion CS46XX based soundcards
      4 *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>
      5 */
      6
      7#ifndef __CS46XX_DSP_SPOS_H__
      8#define __CS46XX_DSP_SPOS_H__
      9
     10#include "cs46xx_dsp_scb_types.h"
     11#include "cs46xx_dsp_task_types.h"
     12
     13#define SYMBOL_CONSTANT  0x0
     14#define SYMBOL_SAMPLE    0x1
     15#define SYMBOL_PARAMETER 0x2
     16#define SYMBOL_CODE      0x3
     17
     18#define SEGTYPE_SP_PROGRAM              0x00000001
     19#define SEGTYPE_SP_PARAMETER            0x00000002
     20#define SEGTYPE_SP_SAMPLE               0x00000003
     21#define SEGTYPE_SP_COEFFICIENT          0x00000004
     22
     23#define DSP_SPOS_UU      0x0deadul     /* unused */
     24#define DSP_SPOS_DC      0x0badul      /* don't care */
     25#define DSP_SPOS_DC_DC   0x0bad0badul  /* don't care */
     26#define DSP_SPOS_UUUU    0xdeadc0edul  /* unused */
     27#define DSP_SPOS_UUHI    0xdeadul
     28#define DSP_SPOS_UULO    0xc0edul
     29#define DSP_SPOS_DCDC    0x0badf1d0ul  /* don't care */
     30#define DSP_SPOS_DCDCHI  0x0badul
     31#define DSP_SPOS_DCDCLO  0xf1d0ul
     32
     33#define DSP_MAX_TASK_NAME   60
     34#define DSP_MAX_SYMBOL_NAME 100
     35#define DSP_MAX_SCB_NAME    60
     36#define DSP_MAX_SCB_DESC    200
     37#define DSP_MAX_TASK_DESC   50
     38
     39#define DSP_MAX_PCM_CHANNELS 32
     40#define DSP_MAX_SRC_NR       14
     41
     42#define DSP_PCM_MAIN_CHANNEL        1
     43#define DSP_PCM_REAR_CHANNEL        2
     44#define DSP_PCM_CENTER_LFE_CHANNEL  3
     45#define DSP_PCM_S71_CHANNEL         4 /* surround 7.1 */
     46#define DSP_IEC958_CHANNEL          5
     47
     48#define DSP_SPDIF_STATUS_OUTPUT_ENABLED       1
     49#define DSP_SPDIF_STATUS_PLAYBACK_OPEN        2
     50#define DSP_SPDIF_STATUS_HW_ENABLED           4
     51#define DSP_SPDIF_STATUS_INPUT_CTRL_ENABLED   8
     52
     53struct dsp_symbol_entry {
     54	u32 address;
     55	char symbol_name[DSP_MAX_SYMBOL_NAME];
     56	int symbol_type;
     57
     58	/* initialized by driver */
     59	struct dsp_module_desc * module;
     60	int deleted;
     61};
     62
     63struct dsp_symbol_desc {
     64	int nsymbols;
     65
     66	struct dsp_symbol_entry *symbols;
     67
     68	/* initialized by driver */
     69	int highest_frag_index;
     70};
     71
     72struct dsp_segment_desc {
     73	int segment_type;
     74	u32 offset;
     75	u32 size;
     76	u32 * data;
     77};
     78
     79struct dsp_module_desc {
     80	char * module_name;
     81	struct dsp_symbol_desc symbol_table;
     82	int nsegments;
     83	struct dsp_segment_desc * segments;
     84
     85	/* initialized by driver */
     86	u32 overlay_begin_address;
     87	u32 load_address;
     88	int nfixups;
     89};
     90
     91struct dsp_scb_descriptor {
     92	char scb_name[DSP_MAX_SCB_NAME];
     93	u32 address;
     94	int index;
     95	u32 *data;
     96
     97	struct dsp_scb_descriptor * sub_list_ptr;
     98	struct dsp_scb_descriptor * next_scb_ptr;
     99	struct dsp_scb_descriptor * parent_scb_ptr;
    100
    101	struct dsp_symbol_entry * task_entry;
    102	struct dsp_symbol_entry * scb_symbol;
    103
    104	struct snd_info_entry *proc_info;
    105	int ref_count;
    106
    107	u16 volume[2];
    108	unsigned int deleted :1;
    109	unsigned int updated :1;
    110	unsigned int volume_set :1;
    111};
    112
    113struct dsp_task_descriptor {
    114	char task_name[DSP_MAX_TASK_NAME];
    115	int size;
    116	u32 address;
    117	int index;
    118	u32 *data;
    119};
    120
    121struct dsp_pcm_channel_descriptor {
    122	int active;
    123	int src_slot;
    124	int pcm_slot;
    125	u32 sample_rate;
    126	u32 unlinked;
    127	struct dsp_scb_descriptor * pcm_reader_scb;
    128	struct dsp_scb_descriptor * src_scb;
    129	struct dsp_scb_descriptor * mixer_scb;
    130
    131	void * private_data;
    132};
    133
    134struct dsp_spos_instance {
    135	struct dsp_symbol_desc symbol_table; /* currently available loaded symbols in SP */
    136
    137	int nmodules;
    138	struct dsp_module_desc * modules; /* modules loaded into SP */
    139
    140	struct dsp_segment_desc code;
    141
    142	/* Main PCM playback mixer */
    143	struct dsp_scb_descriptor * master_mix_scb;
    144	u16 dac_volume_right;
    145	u16 dac_volume_left;
    146
    147	/* Rear/surround PCM playback mixer */
    148	struct dsp_scb_descriptor * rear_mix_scb;
    149
    150	/* Center/LFE mixer */
    151	struct dsp_scb_descriptor * center_lfe_mix_scb;
    152
    153	int npcm_channels;
    154	int nsrc_scb;
    155	struct dsp_pcm_channel_descriptor pcm_channels[DSP_MAX_PCM_CHANNELS];
    156	int src_scb_slots[DSP_MAX_SRC_NR];
    157
    158	/* cache this symbols */
    159	struct dsp_symbol_entry * null_algorithm; /* used by PCMreaderSCB's */
    160	struct dsp_symbol_entry * s16_up;         /* used by SRCtaskSCB's */
    161
    162	/* proc fs */  
    163	struct snd_card *snd_card;
    164	struct snd_info_entry * proc_dsp_dir;
    165
    166	/* SCB's descriptors */
    167	int nscb;
    168	int scb_highest_frag_index;
    169	struct dsp_scb_descriptor scbs[DSP_MAX_SCB_DESC];
    170	struct dsp_scb_descriptor * the_null_scb;
    171
    172	/* Task's descriptors */
    173	int ntask;
    174	struct dsp_task_descriptor tasks[DSP_MAX_TASK_DESC];
    175
    176	/* SPDIF status */
    177	int spdif_status_out;
    178	int spdif_status_in;
    179	u16 spdif_input_volume_right;
    180	u16 spdif_input_volume_left;
    181	/* spdif channel status,
    182	   left right and user validity bits */
    183	unsigned int spdif_csuv_default;
    184	unsigned int spdif_csuv_stream;
    185
    186	/* SPDIF input sample rate converter */
    187	struct dsp_scb_descriptor * spdif_in_src;
    188	/* SPDIF input asynch. receiver */
    189	struct dsp_scb_descriptor * asynch_rx_scb;
    190
    191	/* Capture record mixer SCB */
    192	struct dsp_scb_descriptor * record_mixer_scb;
    193    
    194	/* CODEC input SCB */
    195	struct dsp_scb_descriptor * codec_in_scb;
    196
    197	/* reference snooper */
    198	struct dsp_scb_descriptor * ref_snoop_scb;
    199
    200	/* SPDIF output  PCM reference  */
    201	struct dsp_scb_descriptor * spdif_pcm_input_scb;
    202
    203	/* asynch TX task */
    204	struct dsp_scb_descriptor * asynch_tx_scb;
    205
    206	/* record sources */
    207	struct dsp_scb_descriptor * pcm_input;
    208	struct dsp_scb_descriptor * adc_input;
    209
    210	int spdif_in_sample_rate;
    211};
    212
    213#endif /* __DSP_SPOS_H__ */