ASoC: msm: qdsp6v2: Add common items needed for Instance ID
Add common headers and functions needed to support instance ID. CRs-Fixed: 2151551 Change-Id: I8a167be29cdb5c365ac957530789007e90a91a97 Signed-off-by: Siena Richard <sienar@codeaurora.org> Signed-off-by: Aditya Bavanari <abavanar@codeaurora.org>
This commit is contained in:
parent
832723d733
commit
067a92850f
3 changed files with 158 additions and 1 deletions
|
@ -29,6 +29,108 @@ struct param_outband {
|
||||||
phys_addr_t paddr;
|
phys_addr_t paddr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* --------- Common Structures and Definitions------------- */
|
||||||
|
/* Instance ID Definitions */
|
||||||
|
#define INSTANCE_ID_0 0x0000
|
||||||
|
|
||||||
|
struct mem_mapping_hdr {
|
||||||
|
/*
|
||||||
|
* LSW of parameter data payload address. Supported values: any.
|
||||||
|
* - Must be set to zero for in-band data.
|
||||||
|
*/
|
||||||
|
u32 data_payload_addr_lsw;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MSW of Parameter data payload address. Supported values: any.
|
||||||
|
* - Must be set to zero for in-band data.
|
||||||
|
* - In the case of 32 bit Shared memory address, msw field must be
|
||||||
|
* set to zero.
|
||||||
|
* - In the case of 36 bit shared memory address, bit 31 to bit 4 of
|
||||||
|
* msw must be set to zero.
|
||||||
|
*/
|
||||||
|
u32 data_payload_addr_msw;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Memory map handle returned by DSP through
|
||||||
|
* ASM_CMD_SHARED_MEM_MAP_REGIONS command.
|
||||||
|
* Supported Values: Any.
|
||||||
|
* If mmhandle is NULL, the ParamData payloads are within the
|
||||||
|
* message payload (in-band).
|
||||||
|
* If mmhandle is non-NULL, the ParamData payloads begin at the
|
||||||
|
* address specified in the address msw and lsw (out-of-band).
|
||||||
|
*/
|
||||||
|
u32 mem_map_handle;
|
||||||
|
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Payload format for parameter data.
|
||||||
|
* Immediately following these structures are param_size bytes of parameter
|
||||||
|
* data.
|
||||||
|
*/
|
||||||
|
struct param_hdr_v1 {
|
||||||
|
/* Valid ID of the module. */
|
||||||
|
uint32_t module_id;
|
||||||
|
|
||||||
|
/* Valid ID of the parameter. */
|
||||||
|
uint32_t param_id;
|
||||||
|
|
||||||
|
/* The size of the parameter specified by the module/param ID combo */
|
||||||
|
uint16_t param_size;
|
||||||
|
|
||||||
|
/* This field must be set to zero. */
|
||||||
|
uint16_t reserved;
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
struct param_hdr_v2 {
|
||||||
|
/* Valid ID of the module. */
|
||||||
|
uint32_t module_id;
|
||||||
|
|
||||||
|
/* Valid ID of the parameter. */
|
||||||
|
uint32_t param_id;
|
||||||
|
|
||||||
|
/* The size of the parameter specified by the module/param ID combo */
|
||||||
|
uint32_t param_size;
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
struct param_hdr_v3 {
|
||||||
|
/* Valid ID of the module. */
|
||||||
|
uint32_t module_id;
|
||||||
|
|
||||||
|
/* Instance of the module. */
|
||||||
|
uint16_t instance_id;
|
||||||
|
|
||||||
|
/* This field must be set to zero. */
|
||||||
|
uint16_t reserved;
|
||||||
|
|
||||||
|
/* Valid ID of the parameter. */
|
||||||
|
uint32_t param_id;
|
||||||
|
|
||||||
|
/* The size of the parameter specified by the module/param ID combo */
|
||||||
|
uint32_t param_size;
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
/* A union of all param_hdr versions for versitility and max size */
|
||||||
|
union param_hdrs {
|
||||||
|
struct param_hdr_v1 v1;
|
||||||
|
struct param_hdr_v2 v2;
|
||||||
|
struct param_hdr_v3 v3;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct module_instance_info {
|
||||||
|
/* Module ID. */
|
||||||
|
u32 module_id;
|
||||||
|
|
||||||
|
/* Instance of the module */
|
||||||
|
u16 instance_id;
|
||||||
|
|
||||||
|
/* Reserved. This field must be set to zero. */
|
||||||
|
u16 reserved;
|
||||||
|
} __packed;
|
||||||
|
/* -------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Begin service specific definitions and structures */
|
||||||
|
|
||||||
#define ADSP_ADM_VERSION 0x00070000
|
#define ADSP_ADM_VERSION 0x00070000
|
||||||
|
|
||||||
#define ADM_CMD_SHARED_MEM_MAP_REGIONS 0x00010322
|
#define ADM_CMD_SHARED_MEM_MAP_REGIONS 0x00010322
|
||||||
|
|
|
@ -13,9 +13,11 @@
|
||||||
#ifndef __Q6COMMON_H__
|
#ifndef __Q6COMMON_H__
|
||||||
#define __Q6COMMON_H__
|
#define __Q6COMMON_H__
|
||||||
|
|
||||||
#include <linux/qdsp6v2/apr.h>
|
#include <sound/apr_audio-v2.h>
|
||||||
|
|
||||||
void q6common_update_instance_id_support(bool supported);
|
void q6common_update_instance_id_support(bool supported);
|
||||||
bool q6common_is_instance_id_supported(void);
|
bool q6common_is_instance_id_supported(void);
|
||||||
|
int q6common_pack_pp_params(u8 *dest, struct param_hdr_v3 *v3_hdr,
|
||||||
|
u8 *param_data, u32 *total_size);
|
||||||
|
|
||||||
#endif /* __Q6COMMON_H__ */
|
#endif /* __Q6COMMON_H__ */
|
||||||
|
|
|
@ -30,3 +30,56 @@ bool q6common_is_instance_id_supported(void)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(q6common_is_instance_id_supported);
|
EXPORT_SYMBOL(q6common_is_instance_id_supported);
|
||||||
|
|
||||||
|
int q6common_pack_pp_params(u8 *dest, struct param_hdr_v3 *v3_hdr,
|
||||||
|
u8 *param_data, u32 *total_size)
|
||||||
|
{
|
||||||
|
struct param_hdr_v1 *v1_hdr = NULL;
|
||||||
|
u32 packed_size = 0;
|
||||||
|
u32 param_size = 0;
|
||||||
|
bool iid_supported = q6common_is_instance_id_supported();
|
||||||
|
|
||||||
|
if (dest == NULL) {
|
||||||
|
pr_err("%s: Received NULL pointer for destination\n", __func__);
|
||||||
|
return -EINVAL;
|
||||||
|
} else if (v3_hdr == NULL) {
|
||||||
|
pr_err("%s: Received NULL pointer for header\n", __func__);
|
||||||
|
return -EINVAL;
|
||||||
|
} else if (total_size == NULL) {
|
||||||
|
pr_err("%s: Received NULL pointer for total size\n", __func__);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
param_size = v3_hdr->param_size;
|
||||||
|
packed_size = iid_supported ? sizeof(struct param_hdr_v3) :
|
||||||
|
sizeof(struct param_hdr_v1);
|
||||||
|
|
||||||
|
if (iid_supported) {
|
||||||
|
memcpy(dest, v3_hdr, packed_size);
|
||||||
|
} else {
|
||||||
|
v1_hdr = (struct param_hdr_v1 *) dest;
|
||||||
|
v1_hdr->module_id = v3_hdr->module_id;
|
||||||
|
v1_hdr->param_id = v3_hdr->param_id;
|
||||||
|
|
||||||
|
if (param_size > U16_MAX) {
|
||||||
|
pr_err("%s: Invalid param size for V1 %d\n", __func__,
|
||||||
|
param_size);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
v1_hdr->param_size = param_size;
|
||||||
|
v1_hdr->reserved = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make param_data optional for cases when there is no data
|
||||||
|
* present as in some set cases and all get cases.
|
||||||
|
*/
|
||||||
|
if (param_data != NULL) {
|
||||||
|
memcpy(dest + packed_size, param_data, param_size);
|
||||||
|
packed_size += param_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
*total_size = packed_size;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(q6common_pack_pp_params);
|
||||||
|
|
Loading…
Add table
Reference in a new issue