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  
10  struct hpi_adapter_obj;
11  
12  /* a function that takes an adapter obj and returns an int */
13  typedef 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  
19  struct 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  
34  struct 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  
46  struct hpi_adapter_obj *hpi_find_adapter(u16 adapter_index);
47  
48  u16 hpi_add_adapter(struct hpi_adapter_obj *pao);
49  
50  void hpi_delete_adapter(struct hpi_adapter_obj *pao);
51  
52  short hpi_check_control_cache(struct hpi_control_cache *pC,
53  	struct hpi_message *phm, struct hpi_response *phr);
54  
55  short hpi_check_control_cache_single(struct hpi_control_cache_single *pC,
56  	struct hpi_message *phm, struct hpi_response *phr);
57  
58  struct hpi_control_cache *hpi_alloc_control_cache(const u32
59  	number_of_controls, const u32 size_in_bytes, u8 *pDSP_control_buffer);
60  
61  void hpi_free_control_cache(struct hpi_control_cache *p_cache);
62  
63  void hpi_cmn_control_cache_sync_to_msg(struct hpi_control_cache *pC,
64  	struct hpi_message *phm, struct hpi_response *phr);
65  
66  void hpi_cmn_control_cache_sync_to_msg_single(struct hpi_control_cache_single
67  	*pC, struct hpi_message *phm, struct hpi_response *phr);
68  
69  u16 hpi_validate_response(struct hpi_message *phm, struct hpi_response *phr);
70  
71  hpi_handler_func HPI_COMMON;
72