162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci AudioScience HPI driver 562306a36Sopenharmony_ci Copyright (C) 1997-2014 AudioScience Inc. <support@audioscience.com> 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci*/ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cistruct hpi_adapter_obj; 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci/* a function that takes an adapter obj and returns an int */ 1362306a36Sopenharmony_citypedef int adapter_int_func(struct hpi_adapter_obj *pao, u32 message); 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#define HPI_IRQ_NONE (0) 1662306a36Sopenharmony_ci#define HPI_IRQ_MESSAGE (1) 1762306a36Sopenharmony_ci#define HPI_IRQ_MIXER (2) 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cistruct hpi_adapter_obj { 2062306a36Sopenharmony_ci struct hpi_pci pci; /* PCI info - bus#,dev#,address etc */ 2162306a36Sopenharmony_ci u16 type; /* 0x6644 == ASI6644 etc */ 2262306a36Sopenharmony_ci u16 index; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci struct hpios_spinlock dsp_lock; 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci u16 dsp_crashed; 2762306a36Sopenharmony_ci u16 has_control_cache; 2862306a36Sopenharmony_ci void *priv; 2962306a36Sopenharmony_ci adapter_int_func *irq_query_and_clear; 3062306a36Sopenharmony_ci struct hpi_hostbuffer_status *instream_host_buffer_status; 3162306a36Sopenharmony_ci struct hpi_hostbuffer_status *outstream_host_buffer_status; 3262306a36Sopenharmony_ci}; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistruct hpi_control_cache { 3562306a36Sopenharmony_ci /** indicates whether the structures are initialized */ 3662306a36Sopenharmony_ci u16 init; 3762306a36Sopenharmony_ci u16 adap_idx; 3862306a36Sopenharmony_ci u32 control_count; 3962306a36Sopenharmony_ci u32 cache_size_in_bytes; 4062306a36Sopenharmony_ci /** pointer to allocated memory of lookup pointers. */ 4162306a36Sopenharmony_ci struct hpi_control_cache_info **p_info; 4262306a36Sopenharmony_ci /** pointer to DSP's control cache. */ 4362306a36Sopenharmony_ci u8 *p_cache; 4462306a36Sopenharmony_ci}; 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_cistruct hpi_adapter_obj *hpi_find_adapter(u16 adapter_index); 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ciu16 hpi_add_adapter(struct hpi_adapter_obj *pao); 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_civoid hpi_delete_adapter(struct hpi_adapter_obj *pao); 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_cishort hpi_check_control_cache(struct hpi_control_cache *pC, 5362306a36Sopenharmony_ci struct hpi_message *phm, struct hpi_response *phr); 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cishort hpi_check_control_cache_single(struct hpi_control_cache_single *pC, 5662306a36Sopenharmony_ci struct hpi_message *phm, struct hpi_response *phr); 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_cistruct hpi_control_cache *hpi_alloc_control_cache(const u32 5962306a36Sopenharmony_ci number_of_controls, const u32 size_in_bytes, u8 *pDSP_control_buffer); 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_civoid hpi_free_control_cache(struct hpi_control_cache *p_cache); 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_civoid hpi_cmn_control_cache_sync_to_msg(struct hpi_control_cache *pC, 6462306a36Sopenharmony_ci struct hpi_message *phm, struct hpi_response *phr); 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_civoid hpi_cmn_control_cache_sync_to_msg_single(struct hpi_control_cache_single 6762306a36Sopenharmony_ci *pC, struct hpi_message *phm, struct hpi_response *phr); 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ciu16 hpi_validate_response(struct hpi_message *phm, struct hpi_response *phr); 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_cihpi_handler_func HPI_COMMON; 72