Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  messages.h  Sprache: unbekannt

 
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright(c) 2020 Intel Corporation
 *
 * Author: Cezary Rojewski <cezary.rojewski@intel.com>
 */


#ifndef __SND_SOC_INTEL_CATPT_MSG_H
#define __SND_SOC_INTEL_CATPT_MSG_H

struct catpt_dev;

/* IPC messages base types  */

enum catpt_reply_status {
 CATPT_REPLY_SUCCESS = 0,
 CATPT_REPLY_ERROR_INVALID_PARAM = 1,
 CATPT_REPLY_UNKNOWN_MESSAGE_TYPE = 2,
 CATPT_REPLY_OUT_OF_RESOURCES = 3,
 CATPT_REPLY_BUSY = 4,
 CATPT_REPLY_PENDING = 5,
 CATPT_REPLY_FAILURE = 6,
 CATPT_REPLY_INVALID_REQUEST = 7,
 CATPT_REPLY_UNINITIALIZED = 8,
 CATPT_REPLY_NOT_FOUND = 9,
 CATPT_REPLY_SOURCE_NOT_STARTED = 10,
};

/* GLOBAL messages */

enum catpt_global_msg_type {
 CATPT_GLB_GET_FW_VERSION = 0,
 CATPT_GLB_ALLOCATE_STREAM = 3,
 CATPT_GLB_FREE_STREAM = 4,
 CATPT_GLB_STREAM_MESSAGE = 6,
 CATPT_GLB_REQUEST_CORE_DUMP = 7,
 CATPT_GLB_SET_DEVICE_FORMATS = 10,
 CATPT_GLB_ENTER_DX_STATE = 12,
 CATPT_GLB_GET_MIXER_STREAM_INFO = 13,
};

union catpt_global_msg {
 u32 val;
 struct {
  u32 status:5;
  u32 context:19; /* stream or module specific */
  u32 global_msg_type:5;
  u32 fw_ready:1;
  u32 done:1;
  u32 busy:1;
 };
} __packed;

#define CATPT_MSG(hdr) { .val = hdr }
#define CATPT_GLOBAL_MSG(msg_type) \
 { .global_msg_type = CATPT_GLB_##msg_type }

#define BUILD_HASH_SIZE  40

struct catpt_fw_version {
 u8 build;
 u8 minor;
 u8 major;
 u8 type;
 u8 build_hash[BUILD_HASH_SIZE];
 u32 log_providers_hash;
} __packed;

int catpt_ipc_get_fw_version(struct catpt_dev *cdev,
        struct catpt_fw_version *version);

enum catpt_pin_id {
 CATPT_PIN_ID_SYSTEM = 0,
 CATPT_PIN_ID_REFERENCE = 1,
 CATPT_PIN_ID_CAPTURE1 = 2,
 CATPT_PIN_ID_CAPTURE2 = 3,
 CATPT_PIN_ID_OFFLOAD1 = 4,
 CATPT_PIN_ID_OFFLOAD2 = 5,
 CATPT_PIN_ID_MIXER = 7,
 CATPT_PIN_ID_BLUETOOTH_CAPTURE = 8,
 CATPT_PIN_ID_BLUETOOTH_RENDER = 9,
};

enum catpt_path_id {
 CATPT_PATH_SSP0_OUT = 0,
 CATPT_PATH_SSP0_IN = 1,
 CATPT_PATH_SSP1_OUT = 2,
 CATPT_PATH_SSP1_IN = 3,
 /* duplicated audio in capture path */
 CATPT_PATH_SSP0_IN_DUP = 4,
};

enum catpt_stream_type {
 CATPT_STRM_TYPE_RENDER = 0, /* offload */
 CATPT_STRM_TYPE_SYSTEM = 1,
 CATPT_STRM_TYPE_CAPTURE = 2,
 CATPT_STRM_TYPE_LOOPBACK = 3,
 CATPT_STRM_TYPE_BLUETOOTH_RENDER = 4,
 CATPT_STRM_TYPE_BLUETOOTH_CAPTURE = 5,
};

enum catpt_format_id {
 CATPT_FORMAT_PCM = 0,
 CATPT_FORMAT_MP3 = 1,
 CATPT_FORMAT_AAC = 2,
 CATPT_FORMAT_WMA = 3,
};

enum catpt_channel_index {
 CATPT_CHANNEL_LEFT = 0x0,
 CATPT_CHANNEL_CENTER = 0x1,
 CATPT_CHANNEL_RIGHT = 0x2,
 CATPT_CHANNEL_LEFT_SURROUND = 0x3,
 CATPT_CHANNEL_CENTER_SURROUND = 0x3,
 CATPT_CHANNEL_RIGHT_SURROUND = 0x4,
 CATPT_CHANNEL_LFE = 0x7,
 CATPT_CHANNEL_INVALID = 0xF,
};

enum catpt_channel_config {
 CATPT_CHANNEL_CONFIG_MONO = 0, /* One channel only */
 CATPT_CHANNEL_CONFIG_STEREO = 1, /* L & R */
 CATPT_CHANNEL_CONFIG_2_POINT_1 = 2, /* L, R & LFE; PCM only */
 CATPT_CHANNEL_CONFIG_3_POINT_0 = 3, /* L, C & R; MP3 & AAC only */
 CATPT_CHANNEL_CONFIG_3_POINT_1 = 4, /* L, C, R & LFE; PCM only */
 CATPT_CHANNEL_CONFIG_QUATRO = 5, /* L, R, Ls & Rs; PCM only */
 CATPT_CHANNEL_CONFIG_4_POINT_0 = 6, /* L, C, R & Cs; MP3 & AAC only */
 CATPT_CHANNEL_CONFIG_5_POINT_0 = 7, /* L, C, R, Ls & Rs */
 CATPT_CHANNEL_CONFIG_5_POINT_1 = 8, /* L, C, R, Ls, Rs & LFE */
 CATPT_CHANNEL_CONFIG_DUAL_MONO = 9, /* One channel replicated in two */
 CATPT_CHANNEL_CONFIG_INVALID = 10,
};

enum catpt_interleaving_style {
 CATPT_INTERLEAVING_PER_CHANNEL = 0,
 CATPT_INTERLEAVING_PER_SAMPLE = 1,
};

struct catpt_audio_format {
 u32 sample_rate;
 u32 bit_depth;
 u32 channel_map;
 u32 channel_config;
 u32 interleaving;
 u8 num_channels;
 u8 valid_bit_depth;
 u8 reserved[2];
} __packed;

struct catpt_ring_info {
 u32 page_table_addr;
 u32 num_pages;
 u32 size;
 u32 offset;
 u32 ring_first_page_pfn;
} __packed;

#define CATPT_MODULE_COUNT (CATPT_MODID_LAST + 1)

enum catpt_module_id {
 CATPT_MODID_BASE_FW  = 0x0,
 CATPT_MODID_MP3   = 0x1,
 CATPT_MODID_AAC_5_1  = 0x2,
 CATPT_MODID_AAC_2_0  = 0x3,
 CATPT_MODID_SRC   = 0x4,
 CATPT_MODID_WAVES  = 0x5,
 CATPT_MODID_DOLBY  = 0x6,
 CATPT_MODID_BOOST  = 0x7,
 CATPT_MODID_LPAL  = 0x8,
 CATPT_MODID_DTS   = 0x9,
 CATPT_MODID_PCM_CAPTURE  = 0xA,
 CATPT_MODID_PCM_SYSTEM  = 0xB,
 CATPT_MODID_PCM_REFERENCE = 0xC,
 CATPT_MODID_PCM   = 0xD, /* offload */
 CATPT_MODID_BLUETOOTH_RENDER = 0xE,
 CATPT_MODID_BLUETOOTH_CAPTURE = 0xF,
 CATPT_MODID_LAST  = CATPT_MODID_BLUETOOTH_CAPTURE,
};

struct catpt_module_entry {
 u32 module_id;
 u32 entry_point;
} __packed;

struct catpt_module_map {
 u8 num_entries;
 struct catpt_module_entry entries[];
} __packed;

struct catpt_memory_info {
 u32 offset;
 u32 size;
} __packed;

#define CATPT_CHANNELS_MAX 4
#define CATPT_ALL_CHANNELS_MASK UINT_MAX

struct catpt_stream_info {
 u32 stream_hw_id;
 u32 reserved;
 u32 read_pos_regaddr;
 u32 pres_pos_regaddr;
 u32 peak_meter_regaddr[CATPT_CHANNELS_MAX];
 u32 volume_regaddr[CATPT_CHANNELS_MAX];
} __packed;

int catpt_ipc_alloc_stream(struct catpt_dev *cdev,
      enum catpt_path_id path_id,
      enum catpt_stream_type type,
      struct catpt_audio_format *afmt,
      struct catpt_ring_info *rinfo,
      u8 num_modules,
      struct catpt_module_entry *modules,
      struct resource *persistent,
      struct resource *scratch,
      struct catpt_stream_info *sinfo);
int catpt_ipc_free_stream(struct catpt_dev *cdev, u8 stream_hw_id);

enum catpt_ssp_iface {
 CATPT_SSP_IFACE_0 = 0,
 CATPT_SSP_IFACE_1 = 1,
 CATPT_SSP_COUNT,
};

enum catpt_mclk_frequency {
 CATPT_MCLK_OFF = 0,
 CATPT_MCLK_FREQ_6_MHZ = 1,
 CATPT_MCLK_FREQ_21_MHZ = 2,
 CATPT_MCLK_FREQ_24_MHZ = 3,
};

enum catpt_ssp_mode {
 CATPT_SSP_MODE_I2S_CONSUMER = 0,
 CATPT_SSP_MODE_I2S_PROVIDER = 1,
 CATPT_SSP_MODE_TDM_PROVIDER = 2,
};

struct catpt_ssp_device_format {
 u32 iface;
 u32 mclk;
 u32 mode;
 u16 clock_divider;
 u8 channels;
} __packed;

int catpt_ipc_set_device_format(struct catpt_dev *cdev,
    struct catpt_ssp_device_format *devfmt);

enum catpt_dx_state {
 CATPT_DX_STATE_D3 = 3,
};

enum catpt_dx_type {
 CATPT_DX_TYPE_FW_IMAGE = 0,
 CATPT_DX_TYPE_MEMORY_DUMP = 1,
};

struct catpt_save_meminfo {
 u32 offset;
 u32 size;
 u32 source;
} __packed;

#define SAVE_MEMINFO_MAX 14

struct catpt_dx_context {
 u32 num_meminfo;
 struct catpt_save_meminfo meminfo[SAVE_MEMINFO_MAX];
} __packed;

int catpt_ipc_enter_dxstate(struct catpt_dev *cdev, enum catpt_dx_state state,
       struct catpt_dx_context *context);

struct catpt_mixer_stream_info {
 u32 mixer_hw_id;
 u32 peak_meter_regaddr[CATPT_CHANNELS_MAX];
 u32 volume_regaddr[CATPT_CHANNELS_MAX];
} __packed;

int catpt_ipc_get_mixer_stream_info(struct catpt_dev *cdev,
        struct catpt_mixer_stream_info *info);

/* STREAM messages */

enum catpt_stream_msg_type {
 CATPT_STRM_RESET_STREAM = 0,
 CATPT_STRM_PAUSE_STREAM = 1,
 CATPT_STRM_RESUME_STREAM = 2,
 CATPT_STRM_STAGE_MESSAGE = 3,
 CATPT_STRM_NOTIFICATION = 4,
};

enum catpt_stage_action {
 CATPT_STG_SET_VOLUME = 1,
 CATPT_STG_SET_WRITE_POSITION = 2,
 CATPT_STG_MUTE_LOOPBACK = 3,
};

union catpt_stream_msg {
 u32 val;
 struct {
  u32 status:5;
  u32 reserved:7;
  u32 stage_action:4;
  u32 stream_hw_id:4;
  u32 stream_msg_type:4;
  u32 global_msg_type:5;
  u32 fw_ready:1;
  u32 done:1;
  u32 busy:1;
 };
} __packed;

#define CATPT_STREAM_MSG(msg_type) \
{ \
 .stream_msg_type = CATPT_STRM_##msg_type, \
 .global_msg_type = CATPT_GLB_STREAM_MESSAGE }
#define CATPT_STAGE_MSG(msg_type) \
{ \
 .stage_action = CATPT_STG_##msg_type, \
 .stream_msg_type = CATPT_STRM_STAGE_MESSAGE, \
 .global_msg_type = CATPT_GLB_STREAM_MESSAGE }

int catpt_ipc_reset_stream(struct catpt_dev *cdev, u8 stream_hw_id);
int catpt_ipc_pause_stream(struct catpt_dev *cdev, u8 stream_hw_id);
int catpt_ipc_resume_stream(struct catpt_dev *cdev, u8 stream_hw_id);

/* STREAM messages - STAGE subtype */

enum catpt_audio_curve_type {
 CATPT_AUDIO_CURVE_NONE = 0,
 CATPT_AUDIO_CURVE_WINDOWS_FADE = 1,
};

int catpt_ipc_set_volume(struct catpt_dev *cdev, u8 stream_hw_id,
    u32 channel, u32 volume,
    u32 curve_duration,
    enum catpt_audio_curve_type curve_type);

int catpt_ipc_set_write_pos(struct catpt_dev *cdev, u8 stream_hw_id,
       u32 pos, bool eob, bool ll);

int catpt_ipc_mute_loopback(struct catpt_dev *cdev, u8 stream_hw_id, bool mute);

/* NOTIFICATION messages */

enum catpt_notify_reason {
 CATPT_NOTIFY_POSITION_CHANGED = 0,
 CATPT_NOTIFY_GLITCH_OCCURRED = 1,
};

union catpt_notify_msg {
 u32 val;
 struct {
  u32 mailbox_address:29;
  u32 fw_ready:1;
  u32 done:1;
  u32 busy:1;
 };
 struct {
  u32 status:5;
  u32 reserved:7;
  u32 notify_reason:4;
  u32 stream_hw_id:4;
  u32 stream_msg_type:4;
  u32 global_msg_type:5;
  u32 hdr:3; /* fw_ready, done, busy */
 };
} __packed;

#define FW_INFO_SIZE_MAX 100

struct catpt_fw_ready {
 u32 inbox_offset;
 u32 outbox_offset;
 u32 inbox_size;
 u32 outbox_size;
 u32 fw_info_size;
 char fw_info[FW_INFO_SIZE_MAX];
} __packed;

struct catpt_notify_position {
 u32 stream_position;
 u32 fw_cycle_count;
} __packed;

enum catpt_glitch_type {
 CATPT_GLITCH_UNDERRUN = 1,
 CATPT_GLITCH_DECODER_ERROR = 2,
 CATPT_GLITCH_DOUBLED_WRITE_POS = 3,
};

struct catpt_notify_glitch {
 u32 type;
 u64 presentation_pos;
 u32 write_pos;
} __packed;

#endif

Messung V0.5 in Prozent
C=95 H=100 G=97

[Dauer der Verarbeitung: 0.11 Sekunden, vorverarbeitet 2026-10-04]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1126864
#Domains=1897691