2022-02-10 17:05:21 +02:00
/* SPDX-License-Identifier: GPL-2.0-only */
# ifndef __SOC_SOF_CLIENT_H
# define __SOC_SOF_CLIENT_H
# include <linux/auxiliary_bus.h>
# include <linux/device.h>
# include <linux/list.h>
# include <sound/sof.h>
struct sof_ipc_fw_version ;
struct sof_ipc_cmd_hdr ;
struct snd_sof_dev ;
struct dentry ;
2022-10-31 12:51:40 +02:00
struct sof_ipc4_fw_module ;
2022-02-10 17:05:21 +02:00
/**
* struct sof_client_dev - SOF client device
* @ auxdev : auxiliary device
* @ sdev : pointer to SOF core device struct
* @ list : item in SOF core client dev list
* @ data : device specific data
*/
struct sof_client_dev {
struct auxiliary_device auxdev ;
struct snd_sof_dev * sdev ;
struct list_head list ;
void * data ;
} ;
# define sof_client_dev_to_sof_dev(cdev) ((cdev)->sdev)
# define auxiliary_dev_to_sof_client_dev(auxiliary_dev) \
container_of ( auxiliary_dev , struct sof_client_dev , auxdev )
# define dev_to_sof_client_dev(dev) \
container_of ( to_auxiliary_dev ( dev ) , struct sof_client_dev , auxdev )
int sof_client_ipc_tx_message ( struct sof_client_dev * cdev , void * ipc_msg ,
void * reply_data , size_t reply_bytes ) ;
2023-04-19 14:40:56 -05:00
static inline int sof_client_ipc_tx_message_no_reply ( struct sof_client_dev * cdev , void * ipc_msg )
{
return sof_client_ipc_tx_message ( cdev , ipc_msg , NULL , 0 ) ;
}
2022-10-31 12:51:39 +02:00
int sof_client_ipc_set_get_data ( struct sof_client_dev * cdev , void * ipc_msg ,
bool set ) ;
2022-02-10 17:05:21 +02:00
2022-10-31 12:51:40 +02:00
struct sof_ipc4_fw_module * sof_client_ipc4_find_module ( struct sof_client_dev * c , const guid_t * u ) ;
2022-02-10 17:05:21 +02:00
struct dentry * sof_client_get_debugfs_root ( struct sof_client_dev * cdev ) ;
struct device * sof_client_get_dma_dev ( struct sof_client_dev * cdev ) ;
const struct sof_ipc_fw_version * sof_client_get_fw_version ( struct sof_client_dev * cdev ) ;
2022-05-06 16:26:40 +03:00
size_t sof_client_get_ipc_max_payload_size ( struct sof_client_dev * cdev ) ;
2022-05-06 16:26:43 +03:00
enum sof_ipc_type sof_client_get_ipc_type ( struct sof_client_dev * cdev ) ;
2022-02-10 17:05:21 +02:00
/* module refcount management of SOF core */
int sof_client_core_module_get ( struct sof_client_dev * cdev ) ;
void sof_client_core_module_put ( struct sof_client_dev * cdev ) ;
/* IPC notification */
typedef void ( * sof_client_event_callback ) ( struct sof_client_dev * cdev , void * msg_buf ) ;
int sof_client_register_ipc_rx_handler ( struct sof_client_dev * cdev ,
u32 ipc_msg_type ,
sof_client_event_callback callback ) ;
void sof_client_unregister_ipc_rx_handler ( struct sof_client_dev * cdev ,
u32 ipc_msg_type ) ;
/* DSP state notification and query */
typedef void ( * sof_client_fw_state_callback ) ( struct sof_client_dev * cdev ,
enum sof_fw_state state ) ;
int sof_client_register_fw_state_handler ( struct sof_client_dev * cdev ,
sof_client_fw_state_callback callback ) ;
void sof_client_unregister_fw_state_handler ( struct sof_client_dev * cdev ) ;
enum sof_fw_state sof_client_get_fw_state ( struct sof_client_dev * cdev ) ;
# endif /* __SOC_SOF_CLIENT_H */