107 lines
3.1 KiB
C
107 lines
3.1 KiB
C
/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 and
|
|
* only version 2 as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*/
|
|
|
|
#ifndef __Q6CORE_H__
|
|
#define __Q6CORE_H__
|
|
#include <mach/qdsp6v2/apr.h>
|
|
#include <mach/ocmem.h>
|
|
|
|
|
|
#define AVCS_CMD_GET_LOW_POWER_SEGMENTS_INFO 0x00012903
|
|
|
|
struct avcs_cmd_get_low_power_segments_info {
|
|
struct apr_hdr hdr;
|
|
} __packed;
|
|
|
|
|
|
#define AVCS_CMDRSP_GET_LOW_POWER_SEGMENTS_INFO 0x00012904
|
|
|
|
#define AVCS_CMD_ADSP_EVENT_GET_STATE 0x0001290C
|
|
#define AVCS_CMDRSP_ADSP_EVENT_GET_STATE 0x0001290D
|
|
|
|
/* @brief AVCS_CMDRSP_GET_LOW_POWER_SEGMENTS_INFO payload
|
|
* structure. Payload for this event comprises one instance of
|
|
* avcs_cmd_rsp_get_low_power_segments_info_t, followed
|
|
* immediately by num_segments number of instances of the
|
|
* avcs_mem_segment_t structure.
|
|
*/
|
|
|
|
/* Types of Low Power Memory Segments. */
|
|
#define READ_ONLY_SEGMENT 1
|
|
/*< Read Only memory segment. */
|
|
#define READ_WRITE_SEGMENT 2
|
|
/*< Read Write memory segment. */
|
|
/*Category indicates whether audio/os/sensor segments. */
|
|
#define AUDIO_SEGMENT 1
|
|
/*< Audio memory segment. */
|
|
#define OS_SEGMENT 2
|
|
/*< QDSP6's OS memory segment. */
|
|
|
|
/* @brief Payload structure for AVS low power memory segment
|
|
* structure.
|
|
*/
|
|
struct avcs_mem_segment_t {
|
|
uint16_t type;
|
|
/*< Indicates which type of memory this segment is.
|
|
*Allowed values: READ_ONLY_SEGMENT or READ_WRITE_SEGMENT only.
|
|
*/
|
|
uint16_t category;
|
|
/*< Indicates whether audio or OS segments.
|
|
*Allowed values: AUDIO_SEGMENT or OS_SEGMENT only.
|
|
*/
|
|
uint32_t size;
|
|
/*< Size (in bytes) of this segment.
|
|
* Will be a non-zero value.
|
|
*/
|
|
uint32_t start_address_lsw;
|
|
/*< Lower 32 bits of the 64-bit physical start address
|
|
* of this segment.
|
|
*/
|
|
uint32_t start_address_msw;
|
|
/*< Upper 32 bits of the 64-bit physical start address
|
|
* of this segment.
|
|
*/
|
|
};
|
|
|
|
struct avcs_cmd_rsp_get_low_power_segments_info_t {
|
|
uint32_t num_segments;
|
|
/*< Number of segments in this response.
|
|
* 0: there are no known sections that should be mapped
|
|
* from DDR to OCMEM.
|
|
* >0: the number of memory segments in the following list.
|
|
*/
|
|
|
|
uint32_t bandwidth;
|
|
/*< Required OCMEM read/write bandwidth (in bytes per second)
|
|
* if OCMEM is granted.
|
|
* 0 if num_segments = 0
|
|
* >0 if num_segments > 0.
|
|
*/
|
|
struct avcs_mem_segment_t mem_segment[OCMEM_MAX_CHUNKS];
|
|
};
|
|
|
|
|
|
int core_get_low_power_segments(
|
|
struct avcs_cmd_rsp_get_low_power_segments_info_t **);
|
|
bool q6core_is_adsp_ready(void);
|
|
|
|
#define ADSP_CMD_SET_DOLBY_MANUFACTURER_ID 0x00012918
|
|
|
|
struct adsp_dolby_manufacturer_id {
|
|
struct apr_hdr hdr;
|
|
int manufacturer_id;
|
|
};
|
|
|
|
uint32_t core_set_dolby_manufacturer_id(int manufacturer_id);
|
|
|
|
#endif /* __Q6CORE_H__ */
|