18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/** 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci AudioScience HPI driver 58c2ecf20Sopenharmony_ci Copyright (C) 1997-2014 AudioScience Inc. <support@audioscience.com> 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci*/ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_cistruct hpi_adapter_obj; 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci/* a function that takes an adapter obj and returns an int */ 138c2ecf20Sopenharmony_citypedef int adapter_int_func(struct hpi_adapter_obj *pao, u32 message); 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci#define HPI_IRQ_NONE (0) 168c2ecf20Sopenharmony_ci#define HPI_IRQ_MESSAGE (1) 178c2ecf20Sopenharmony_ci#define HPI_IRQ_MIXER (2) 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_cistruct hpi_adapter_obj { 208c2ecf20Sopenharmony_ci struct hpi_pci pci; /* PCI info - bus#,dev#,address etc */ 218c2ecf20Sopenharmony_ci u16 type; /* 0x6644 == ASI6644 etc */ 228c2ecf20Sopenharmony_ci u16 index; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci struct hpios_spinlock dsp_lock; 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci u16 dsp_crashed; 278c2ecf20Sopenharmony_ci u16 has_control_cache; 288c2ecf20Sopenharmony_ci void *priv; 298c2ecf20Sopenharmony_ci adapter_int_func *irq_query_and_clear; 308c2ecf20Sopenharmony_ci struct hpi_hostbuffer_status *instream_host_buffer_status; 318c2ecf20Sopenharmony_ci struct hpi_hostbuffer_status *outstream_host_buffer_status; 328c2ecf20Sopenharmony_ci}; 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_cistruct hpi_control_cache { 358c2ecf20Sopenharmony_ci /** indicates whether the structures are initialized */ 368c2ecf20Sopenharmony_ci u16 init; 378c2ecf20Sopenharmony_ci u16 adap_idx; 388c2ecf20Sopenharmony_ci u32 control_count; 398c2ecf20Sopenharmony_ci u32 cache_size_in_bytes; 408c2ecf20Sopenharmony_ci /** pointer to allocated memory of lookup pointers. */ 418c2ecf20Sopenharmony_ci struct hpi_control_cache_info **p_info; 428c2ecf20Sopenharmony_ci /** pointer to DSP's control cache. */ 438c2ecf20Sopenharmony_ci u8 *p_cache; 448c2ecf20Sopenharmony_ci}; 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_cistruct hpi_adapter_obj *hpi_find_adapter(u16 adapter_index); 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ciu16 hpi_add_adapter(struct hpi_adapter_obj *pao); 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_civoid hpi_delete_adapter(struct hpi_adapter_obj *pao); 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_cishort hpi_check_control_cache(struct hpi_control_cache *pC, 538c2ecf20Sopenharmony_ci struct hpi_message *phm, struct hpi_response *phr); 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_cishort hpi_check_control_cache_single(struct hpi_control_cache_single *pC, 568c2ecf20Sopenharmony_ci struct hpi_message *phm, struct hpi_response *phr); 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_cistruct hpi_control_cache *hpi_alloc_control_cache(const u32 598c2ecf20Sopenharmony_ci number_of_controls, const u32 size_in_bytes, u8 *pDSP_control_buffer); 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_civoid hpi_free_control_cache(struct hpi_control_cache *p_cache); 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_civoid hpi_cmn_control_cache_sync_to_msg(struct hpi_control_cache *pC, 648c2ecf20Sopenharmony_ci struct hpi_message *phm, struct hpi_response *phr); 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_civoid hpi_cmn_control_cache_sync_to_msg_single(struct hpi_control_cache_single 678c2ecf20Sopenharmony_ci *pC, struct hpi_message *phm, struct hpi_response *phr); 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ciu16 hpi_validate_response(struct hpi_message *phm, struct hpi_response *phr); 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_cihpi_handler_func HPI_COMMON; 72