
Add support for virtualized APR frontend driver for audio. Virtualized APR frontend driver resides in guest VM and supports all legacy APR APIs. It will rely on MSM_HAB to communicate with APR backend driver, which resides in physical VM, where legacy SMD is utilized for communication between APPS and ADSP. Change-Id: I1df70a76defec17a45db93f3707c35e4fa796bc0 Signed-off-by: Timothy Sham <tsham@codeaurora.org>
109 rivejä
2.8 KiB
C
109 rivejä
2.8 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Copyright (c) 2016-2017, 2019 The Linux Foundation. All rights reserved.
|
|
*/
|
|
#ifndef __APRV2_VM_H__
|
|
#define __APRV2_VM_H__
|
|
|
|
#define APRV2_VM_MAX_DNS_SIZE (31)
|
|
/* Includes NULL character. */
|
|
#define APRV2_VM_PKT_SERVICE_ID_MASK (0x00FF)
|
|
/* Bitmask of the service ID field. */
|
|
|
|
/* Packet Structure Definition */
|
|
struct aprv2_vm_packet_t {
|
|
uint32_t header;
|
|
uint16_t src_addr;
|
|
uint16_t src_port;
|
|
uint16_t dst_addr;
|
|
uint16_t dst_port;
|
|
uint32_t token;
|
|
uint32_t opcode;
|
|
};
|
|
|
|
/**
|
|
* In order to send command/event via MM HAB, the following buffer
|
|
* format shall be followed, where the buffer is provided to the
|
|
* HAB send API.
|
|
* |-----cmd_id or evt_id -----| <- 32 bit, e.g. APRV2_VM_CMDID_REGISTER
|
|
* |-----cmd payload ----------| e.g. aprv2_vm_cmd_register_t
|
|
* | ... |
|
|
*
|
|
* In order to receive a command response or event ack, the following
|
|
* buffer format shall be followed, where the buffer is provided to
|
|
* the HAB receive API.
|
|
* |-----cmd response ---------| e.g. aprv2_vm_cmd_register_rsp_t
|
|
* | ... |
|
|
*/
|
|
|
|
/* Registers a service with the backend APR driver. */
|
|
#define APRV2_VM_CMDID_REGISTER (0x00000001)
|
|
|
|
struct aprv2_vm_cmd_register_t {
|
|
uint32_t name_size;
|
|
/**< The service name string size in bytes. */
|
|
char name[APRV2_VM_MAX_DNS_SIZE];
|
|
/**<
|
|
* The service name string to register.
|
|
*
|
|
* A NULL name means the service does not have a name.
|
|
*/
|
|
uint16_t addr;
|
|
/**<
|
|
* The address to register.
|
|
*
|
|
* A zero value means to auto-generate a free dynamic address.
|
|
* A non-zero value means to directly use the statically assigned address.
|
|
*/
|
|
};
|
|
|
|
struct aprv2_vm_cmd_register_rsp_t {
|
|
int32_t status;
|
|
/**< The status of registration. */
|
|
uint32_t handle;
|
|
/**< The registered service handle. */
|
|
uint16_t addr;
|
|
/**< The actual registered address. */
|
|
};
|
|
|
|
#define APRV2_VM_CMDID_DEREGISTER (0x00000002)
|
|
|
|
struct aprv2_vm_cmd_deregister_t {
|
|
uint32_t handle;
|
|
/**< The registered service handle. */
|
|
};
|
|
|
|
struct aprv2_vm_cmd_deregister_rsp_t {
|
|
int32_t status;
|
|
/**< The status of de-registration. */
|
|
};
|
|
|
|
#define APRV2_VM_CMDID_ASYNC_SEND (0x00000003)
|
|
|
|
struct aprv2_vm_cmd_async_send_t {
|
|
uint32_t handle;
|
|
/**< The registered service handle. */
|
|
struct aprv2_vm_packet_t pkt_header;
|
|
/**< The packet header. */
|
|
/* The apr packet payload follows */
|
|
};
|
|
|
|
struct aprv2_vm_cmd_async_send_rsp_t {
|
|
int32_t status;
|
|
/**< The status of send. */
|
|
};
|
|
|
|
#define APRV2_VM_EVT_RX_PKT_AVAILABLE (0x00000004)
|
|
|
|
struct aprv2_vm_evt_rx_pkt_available_t {
|
|
struct aprv2_vm_packet_t pkt_header;
|
|
/**< The packet header. */
|
|
/* The apr packet payload follows */
|
|
};
|
|
|
|
struct aprv2_vm_ack_rx_pkt_available_t {
|
|
int32_t status;
|
|
};
|
|
|
|
#endif /* __APRV2_VM_H__ */
|