1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3
4    AudioScience HPI driver
5    Copyright (C) 1997-2014  AudioScience Inc. <support@audioscience.com>
6
7
8*/
9
10struct hpi_adapter_obj;
11
12/* a function that takes an adapter obj and returns an int */
13typedef int adapter_int_func(struct hpi_adapter_obj *pao, u32 message);
14
15#define HPI_IRQ_NONE		(0)
16#define HPI_IRQ_MESSAGE		(1)
17#define HPI_IRQ_MIXER		(2)
18
19struct hpi_adapter_obj {
20	struct hpi_pci pci;	/* PCI info - bus#,dev#,address etc */
21	u16 type;		/* 0x6644 == ASI6644 etc */
22	u16 index;
23
24	struct hpios_spinlock dsp_lock;
25
26	u16 dsp_crashed;
27	u16 has_control_cache;
28	void *priv;
29	adapter_int_func *irq_query_and_clear;
30	struct hpi_hostbuffer_status *instream_host_buffer_status;
31	struct hpi_hostbuffer_status *outstream_host_buffer_status;
32};
33
34struct hpi_control_cache {
35	/** indicates whether the structures are initialized */
36	u16 init;
37	u16 adap_idx;
38	u32 control_count;
39	u32 cache_size_in_bytes;
40	/** pointer to allocated memory of lookup pointers. */
41	struct hpi_control_cache_info **p_info;
42	/** pointer to DSP's control cache. */
43	u8 *p_cache;
44};
45
46struct hpi_adapter_obj *hpi_find_adapter(u16 adapter_index);
47
48u16 hpi_add_adapter(struct hpi_adapter_obj *pao);
49
50void hpi_delete_adapter(struct hpi_adapter_obj *pao);
51
52short hpi_check_control_cache(struct hpi_control_cache *pC,
53	struct hpi_message *phm, struct hpi_response *phr);
54
55short hpi_check_control_cache_single(struct hpi_control_cache_single *pC,
56	struct hpi_message *phm, struct hpi_response *phr);
57
58struct hpi_control_cache *hpi_alloc_control_cache(const u32
59	number_of_controls, const u32 size_in_bytes, u8 *pDSP_control_buffer);
60
61void hpi_free_control_cache(struct hpi_control_cache *p_cache);
62
63void hpi_cmn_control_cache_sync_to_msg(struct hpi_control_cache *pC,
64	struct hpi_message *phm, struct hpi_response *phr);
65
66void hpi_cmn_control_cache_sync_to_msg_single(struct hpi_control_cache_single
67	*pC, struct hpi_message *phm, struct hpi_response *phr);
68
69u16 hpi_validate_response(struct hpi_message *phm, struct hpi_response *phr);
70
71hpi_handler_func HPI_COMMON;
72