107d7fe7bSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2719f82d3SEliot Blennerhassett /****************************************************************************** 3719f82d3SEliot Blennerhassett 4719f82d3SEliot Blennerhassett AudioScience HPI driver 592fd918cSEliot Blennerhassett Copyright (C) 1997-2012 AudioScience Inc. <support@audioscience.com> 6719f82d3SEliot Blennerhassett 7719f82d3SEliot Blennerhassett 8719f82d3SEliot Blennerhassett HPI internal definitions 9719f82d3SEliot Blennerhassett 10719f82d3SEliot Blennerhassett (C) Copyright AudioScience Inc. 1996-2009 11719f82d3SEliot Blennerhassett ******************************************************************************/ 12719f82d3SEliot Blennerhassett 13719f82d3SEliot Blennerhassett #ifndef _HPI_INTERNAL_H_ 14719f82d3SEliot Blennerhassett #define _HPI_INTERNAL_H_ 15719f82d3SEliot Blennerhassett 16719f82d3SEliot Blennerhassett #include "hpi.h" 17d8aefaefSEliot Blennerhassett 18719f82d3SEliot Blennerhassett /** maximum number of memory regions mapped to an adapter */ 19719f82d3SEliot Blennerhassett #define HPI_MAX_ADAPTER_MEM_SPACES (2) 20719f82d3SEliot Blennerhassett 213285ea10SEliot Blennerhassett /* Each OS needs its own hpios.h */ 22719f82d3SEliot Blennerhassett #include "hpios.h" 23719f82d3SEliot Blennerhassett 24719f82d3SEliot Blennerhassett /* physical memory allocation */ 25719f82d3SEliot Blennerhassett 26719f82d3SEliot Blennerhassett /** Allocate and map an area of locked memory for bus master DMA operations. 27719f82d3SEliot Blennerhassett 28719f82d3SEliot Blennerhassett On success, *pLockedMemeHandle is a valid handle, and 0 is returned 29719f82d3SEliot Blennerhassett On error *pLockedMemHandle marked invalid, non-zero returned. 30719f82d3SEliot Blennerhassett 31719f82d3SEliot Blennerhassett If this function succeeds, then HpiOs_LockedMem_GetVirtAddr() and 32719f82d3SEliot Blennerhassett HpiOs_LockedMem_GetPyhsAddr() will always succed on the returned handle. 33719f82d3SEliot Blennerhassett */ 3492fd918cSEliot Blennerhassett u16 hpios_locked_mem_alloc(struct consistent_dma_area *p_locked_mem_handle, 35719f82d3SEliot Blennerhassett /**< memory handle */ 363285ea10SEliot Blennerhassett u32 size, /**< Size in bytes to allocate */ 37719f82d3SEliot Blennerhassett struct pci_dev *p_os_reference 38719f82d3SEliot Blennerhassett /**< OS specific data required for memory allocation */ 39719f82d3SEliot Blennerhassett ); 40719f82d3SEliot Blennerhassett 41719f82d3SEliot Blennerhassett /** Free mapping and memory represented by LockedMemHandle 42719f82d3SEliot Blennerhassett 43719f82d3SEliot Blennerhassett Frees any resources, then invalidates the handle. 44719f82d3SEliot Blennerhassett Returns 0 on success, 1 if handle is invalid. 45719f82d3SEliot Blennerhassett 46719f82d3SEliot Blennerhassett */ 47719f82d3SEliot Blennerhassett u16 hpios_locked_mem_free(struct consistent_dma_area *locked_mem_handle); 48719f82d3SEliot Blennerhassett 49719f82d3SEliot Blennerhassett /** Get the physical PCI address of memory represented by LockedMemHandle. 50719f82d3SEliot Blennerhassett 51719f82d3SEliot Blennerhassett If handle is invalid *pPhysicalAddr is set to zero and return 1 52719f82d3SEliot Blennerhassett */ 53719f82d3SEliot Blennerhassett u16 hpios_locked_mem_get_phys_addr(struct consistent_dma_area 54719f82d3SEliot Blennerhassett *locked_mem_handle, u32 *p_physical_addr); 55719f82d3SEliot Blennerhassett 566779ec13SRandy Dunlap /** Get the CPU address of memory represented by LockedMemHandle. 57719f82d3SEliot Blennerhassett 58719f82d3SEliot Blennerhassett If handle is NULL *ppvVirtualAddr is set to NULL and return 1 59719f82d3SEliot Blennerhassett */ 60719f82d3SEliot Blennerhassett u16 hpios_locked_mem_get_virt_addr(struct consistent_dma_area 61719f82d3SEliot Blennerhassett *locked_mem_handle, void **ppv_virtual_addr); 62719f82d3SEliot Blennerhassett 63719f82d3SEliot Blennerhassett /** Check that handle is valid 64719f82d3SEliot Blennerhassett i.e it represents a valid memory area 65719f82d3SEliot Blennerhassett */ 66719f82d3SEliot Blennerhassett u16 hpios_locked_mem_valid(struct consistent_dma_area *locked_mem_handle); 67719f82d3SEliot Blennerhassett 68719f82d3SEliot Blennerhassett /* timing/delay */ 69719f82d3SEliot Blennerhassett void hpios_delay_micro_seconds(u32 num_micro_sec); 70719f82d3SEliot Blennerhassett 71719f82d3SEliot Blennerhassett struct hpi_message; 72719f82d3SEliot Blennerhassett struct hpi_response; 73719f82d3SEliot Blennerhassett 74719f82d3SEliot Blennerhassett typedef void hpi_handler_func(struct hpi_message *, struct hpi_response *); 75719f82d3SEliot Blennerhassett 76719f82d3SEliot Blennerhassett /* If the assert fails, compiler complains 77719f82d3SEliot Blennerhassett something like size of array `msg' is negative. 78719f82d3SEliot Blennerhassett Unlike linux BUILD_BUG_ON, this works outside function scope. 79719f82d3SEliot Blennerhassett */ 80719f82d3SEliot Blennerhassett #define compile_time_assert(cond, msg) \ 81719f82d3SEliot Blennerhassett typedef char ASSERT_##msg[(cond) ? 1 : -1] 82719f82d3SEliot Blennerhassett 83719f82d3SEliot Blennerhassett /******************************************* bus types */ 84719f82d3SEliot Blennerhassett enum HPI_BUSES { 85719f82d3SEliot Blennerhassett HPI_BUS_ISAPNP = 1, 86719f82d3SEliot Blennerhassett HPI_BUS_PCI = 2, 87719f82d3SEliot Blennerhassett HPI_BUS_USB = 3, 88719f82d3SEliot Blennerhassett HPI_BUS_NET = 4 89719f82d3SEliot Blennerhassett }; 90719f82d3SEliot Blennerhassett 91ba94455cSEliot Blennerhassett enum HPI_SUBSYS_OPTIONS { 92ba94455cSEliot Blennerhassett /* 0, 256 are invalid, 1..255 reserved for global options */ 93ba94455cSEliot Blennerhassett HPI_SUBSYS_OPT_NET_ENABLE = 257, 94ba94455cSEliot Blennerhassett HPI_SUBSYS_OPT_NET_BROADCAST = 258, 95ba94455cSEliot Blennerhassett HPI_SUBSYS_OPT_NET_UNICAST = 259, 96ba94455cSEliot Blennerhassett HPI_SUBSYS_OPT_NET_ADDR = 260, 97ba94455cSEliot Blennerhassett HPI_SUBSYS_OPT_NET_MASK = 261, 98ba94455cSEliot Blennerhassett HPI_SUBSYS_OPT_NET_ADAPTER_ADDRESS_ADD = 262 99ba94455cSEliot Blennerhassett }; 100ba94455cSEliot Blennerhassett 101fc3a3990SEliot Blennerhassett /** Volume flags 102fc3a3990SEliot Blennerhassett */ 103fc3a3990SEliot Blennerhassett enum HPI_VOLUME_FLAGS { 104fc3a3990SEliot Blennerhassett /** Set if the volume control is muted */ 105fc3a3990SEliot Blennerhassett HPI_VOLUME_FLAG_MUTED = (1 << 0), 106fc3a3990SEliot Blennerhassett /** Set if the volume control has a mute function */ 107fc3a3990SEliot Blennerhassett HPI_VOLUME_FLAG_HAS_MUTE = (1 << 1), 108fc3a3990SEliot Blennerhassett /** Set if volume control can do autofading */ 109fc3a3990SEliot Blennerhassett HPI_VOLUME_FLAG_HAS_AUTOFADE = (1 << 2) 110fc3a3990SEliot Blennerhassett /* Note Flags >= (1<<8) are for DSP internal use only */ 111fc3a3990SEliot Blennerhassett }; 112fc3a3990SEliot Blennerhassett 113719f82d3SEliot Blennerhassett /******************************************* CONTROL ATTRIBUTES ****/ 114719f82d3SEliot Blennerhassett /* (in order of control type ID */ 115719f82d3SEliot Blennerhassett 116719f82d3SEliot Blennerhassett /* This allows for 255 control types, 256 unique attributes each */ 1173285ea10SEliot Blennerhassett #define HPI_CTL_ATTR(ctl, ai) ((HPI_CONTROL_##ctl << 8) + ai) 118719f82d3SEliot Blennerhassett 119719f82d3SEliot Blennerhassett /* Get the sub-index of the attribute for a control type */ 120719f82d3SEliot Blennerhassett #define HPI_CTL_ATTR_INDEX(i) (i & 0xff) 121719f82d3SEliot Blennerhassett 122108ccb3fSEliot Blennerhassett /* Extract the control from the control attribute */ 123108ccb3fSEliot Blennerhassett #define HPI_CTL_ATTR_CONTROL(i) (i >> 8) 124108ccb3fSEliot Blennerhassett 125719f82d3SEliot Blennerhassett /** Enable event generation for a control. 126719f82d3SEliot Blennerhassett 0=disable, 1=enable 127719f82d3SEliot Blennerhassett \note generic to all controls that can generate events 128719f82d3SEliot Blennerhassett */ 129719f82d3SEliot Blennerhassett 1303285ea10SEliot Blennerhassett /** Unique identifiers for every control attribute 131719f82d3SEliot Blennerhassett */ 1323285ea10SEliot Blennerhassett enum HPI_CONTROL_ATTRIBUTES { 1333285ea10SEliot Blennerhassett HPI_GENERIC_ENABLE = HPI_CTL_ATTR(GENERIC, 1), 1343285ea10SEliot Blennerhassett HPI_GENERIC_EVENT_ENABLE = HPI_CTL_ATTR(GENERIC, 2), 135719f82d3SEliot Blennerhassett 1363285ea10SEliot Blennerhassett HPI_VOLUME_GAIN = HPI_CTL_ATTR(VOLUME, 1), 1373285ea10SEliot Blennerhassett HPI_VOLUME_AUTOFADE = HPI_CTL_ATTR(VOLUME, 2), 138fc3a3990SEliot Blennerhassett HPI_VOLUME_MUTE = HPI_CTL_ATTR(VOLUME, 3), 139fc3a3990SEliot Blennerhassett HPI_VOLUME_GAIN_AND_FLAGS = HPI_CTL_ATTR(VOLUME, 4), 1403285ea10SEliot Blennerhassett HPI_VOLUME_NUM_CHANNELS = HPI_CTL_ATTR(VOLUME, 6), 1413285ea10SEliot Blennerhassett HPI_VOLUME_RANGE = HPI_CTL_ATTR(VOLUME, 10), 142719f82d3SEliot Blennerhassett 1433285ea10SEliot Blennerhassett HPI_METER_RMS = HPI_CTL_ATTR(METER, 1), 1443285ea10SEliot Blennerhassett HPI_METER_PEAK = HPI_CTL_ATTR(METER, 2), 1453285ea10SEliot Blennerhassett HPI_METER_RMS_BALLISTICS = HPI_CTL_ATTR(METER, 3), 1463285ea10SEliot Blennerhassett HPI_METER_PEAK_BALLISTICS = HPI_CTL_ATTR(METER, 4), 1473285ea10SEliot Blennerhassett HPI_METER_NUM_CHANNELS = HPI_CTL_ATTR(METER, 5), 148719f82d3SEliot Blennerhassett 1493285ea10SEliot Blennerhassett HPI_MULTIPLEXER_SOURCE = HPI_CTL_ATTR(MULTIPLEXER, 1), 1503285ea10SEliot Blennerhassett HPI_MULTIPLEXER_QUERYSOURCE = HPI_CTL_ATTR(MULTIPLEXER, 2), 151719f82d3SEliot Blennerhassett 1523285ea10SEliot Blennerhassett HPI_AESEBUTX_FORMAT = HPI_CTL_ATTR(AESEBUTX, 1), 1533285ea10SEliot Blennerhassett HPI_AESEBUTX_SAMPLERATE = HPI_CTL_ATTR(AESEBUTX, 3), 1543285ea10SEliot Blennerhassett HPI_AESEBUTX_CHANNELSTATUS = HPI_CTL_ATTR(AESEBUTX, 4), 1553285ea10SEliot Blennerhassett HPI_AESEBUTX_USERDATA = HPI_CTL_ATTR(AESEBUTX, 5), 156719f82d3SEliot Blennerhassett 1573285ea10SEliot Blennerhassett HPI_AESEBURX_FORMAT = HPI_CTL_ATTR(AESEBURX, 1), 1583285ea10SEliot Blennerhassett HPI_AESEBURX_ERRORSTATUS = HPI_CTL_ATTR(AESEBURX, 2), 1593285ea10SEliot Blennerhassett HPI_AESEBURX_SAMPLERATE = HPI_CTL_ATTR(AESEBURX, 3), 1603285ea10SEliot Blennerhassett HPI_AESEBURX_CHANNELSTATUS = HPI_CTL_ATTR(AESEBURX, 4), 1613285ea10SEliot Blennerhassett HPI_AESEBURX_USERDATA = HPI_CTL_ATTR(AESEBURX, 5), 162719f82d3SEliot Blennerhassett 1633285ea10SEliot Blennerhassett HPI_LEVEL_GAIN = HPI_CTL_ATTR(LEVEL, 1), 1643285ea10SEliot Blennerhassett HPI_LEVEL_RANGE = HPI_CTL_ATTR(LEVEL, 10), 1653285ea10SEliot Blennerhassett 1663285ea10SEliot Blennerhassett HPI_TUNER_BAND = HPI_CTL_ATTR(TUNER, 1), 1673285ea10SEliot Blennerhassett HPI_TUNER_FREQ = HPI_CTL_ATTR(TUNER, 2), 1683285ea10SEliot Blennerhassett HPI_TUNER_LEVEL_AVG = HPI_CTL_ATTR(TUNER, 3), 1693285ea10SEliot Blennerhassett HPI_TUNER_LEVEL_RAW = HPI_CTL_ATTR(TUNER, 4), 1703285ea10SEliot Blennerhassett HPI_TUNER_SNR = HPI_CTL_ATTR(TUNER, 5), 1713285ea10SEliot Blennerhassett HPI_TUNER_GAIN = HPI_CTL_ATTR(TUNER, 6), 1723285ea10SEliot Blennerhassett HPI_TUNER_STATUS = HPI_CTL_ATTR(TUNER, 7), 1733285ea10SEliot Blennerhassett HPI_TUNER_MODE = HPI_CTL_ATTR(TUNER, 8), 1743285ea10SEliot Blennerhassett HPI_TUNER_RDS = HPI_CTL_ATTR(TUNER, 9), 1753285ea10SEliot Blennerhassett HPI_TUNER_DEEMPHASIS = HPI_CTL_ATTR(TUNER, 10), 1763285ea10SEliot Blennerhassett HPI_TUNER_PROGRAM = HPI_CTL_ATTR(TUNER, 11), 1773285ea10SEliot Blennerhassett HPI_TUNER_HDRADIO_SIGNAL_QUALITY = HPI_CTL_ATTR(TUNER, 12), 1783285ea10SEliot Blennerhassett HPI_TUNER_HDRADIO_SDK_VERSION = HPI_CTL_ATTR(TUNER, 13), 1793285ea10SEliot Blennerhassett HPI_TUNER_HDRADIO_DSP_VERSION = HPI_CTL_ATTR(TUNER, 14), 1803285ea10SEliot Blennerhassett HPI_TUNER_HDRADIO_BLEND = HPI_CTL_ATTR(TUNER, 15), 1813285ea10SEliot Blennerhassett 1823285ea10SEliot Blennerhassett HPI_VOX_THRESHOLD = HPI_CTL_ATTR(VOX, 1), 1833285ea10SEliot Blennerhassett 1843285ea10SEliot Blennerhassett HPI_CHANNEL_MODE_MODE = HPI_CTL_ATTR(CHANNEL_MODE, 1), 1853285ea10SEliot Blennerhassett 1863285ea10SEliot Blennerhassett HPI_BITSTREAM_DATA_POLARITY = HPI_CTL_ATTR(BITSTREAM, 1), 1873285ea10SEliot Blennerhassett HPI_BITSTREAM_CLOCK_EDGE = HPI_CTL_ATTR(BITSTREAM, 2), 1883285ea10SEliot Blennerhassett HPI_BITSTREAM_CLOCK_SOURCE = HPI_CTL_ATTR(BITSTREAM, 3), 1893285ea10SEliot Blennerhassett HPI_BITSTREAM_ACTIVITY = HPI_CTL_ATTR(BITSTREAM, 4), 1903285ea10SEliot Blennerhassett 1913285ea10SEliot Blennerhassett HPI_SAMPLECLOCK_SOURCE = HPI_CTL_ATTR(SAMPLECLOCK, 1), 1923285ea10SEliot Blennerhassett HPI_SAMPLECLOCK_SAMPLERATE = HPI_CTL_ATTR(SAMPLECLOCK, 2), 1933285ea10SEliot Blennerhassett HPI_SAMPLECLOCK_SOURCE_INDEX = HPI_CTL_ATTR(SAMPLECLOCK, 3), 1943285ea10SEliot Blennerhassett HPI_SAMPLECLOCK_LOCAL_SAMPLERATE = HPI_CTL_ATTR(SAMPLECLOCK, 4), 1953285ea10SEliot Blennerhassett HPI_SAMPLECLOCK_AUTO = HPI_CTL_ATTR(SAMPLECLOCK, 5), 1963285ea10SEliot Blennerhassett HPI_SAMPLECLOCK_LOCAL_LOCK = HPI_CTL_ATTR(SAMPLECLOCK, 6), 1973285ea10SEliot Blennerhassett 1983285ea10SEliot Blennerhassett HPI_MICROPHONE_PHANTOM_POWER = HPI_CTL_ATTR(MICROPHONE, 1), 1993285ea10SEliot Blennerhassett 2003285ea10SEliot Blennerhassett HPI_EQUALIZER_NUM_FILTERS = HPI_CTL_ATTR(EQUALIZER, 1), 2013285ea10SEliot Blennerhassett HPI_EQUALIZER_FILTER = HPI_CTL_ATTR(EQUALIZER, 2), 2023285ea10SEliot Blennerhassett HPI_EQUALIZER_COEFFICIENTS = HPI_CTL_ATTR(EQUALIZER, 3), 2033285ea10SEliot Blennerhassett 2043285ea10SEliot Blennerhassett HPI_COMPANDER_PARAMS = HPI_CTL_ATTR(COMPANDER, 1), 2053285ea10SEliot Blennerhassett HPI_COMPANDER_MAKEUPGAIN = HPI_CTL_ATTR(COMPANDER, 2), 2063285ea10SEliot Blennerhassett HPI_COMPANDER_THRESHOLD = HPI_CTL_ATTR(COMPANDER, 3), 2073285ea10SEliot Blennerhassett HPI_COMPANDER_RATIO = HPI_CTL_ATTR(COMPANDER, 4), 2083285ea10SEliot Blennerhassett HPI_COMPANDER_ATTACK = HPI_CTL_ATTR(COMPANDER, 5), 2093285ea10SEliot Blennerhassett HPI_COMPANDER_DECAY = HPI_CTL_ATTR(COMPANDER, 6), 2103285ea10SEliot Blennerhassett 2113285ea10SEliot Blennerhassett HPI_COBRANET_SET = HPI_CTL_ATTR(COBRANET, 1), 2123285ea10SEliot Blennerhassett HPI_COBRANET_GET = HPI_CTL_ATTR(COBRANET, 2), 2133285ea10SEliot Blennerhassett HPI_COBRANET_GET_STATUS = HPI_CTL_ATTR(COBRANET, 5), 2143285ea10SEliot Blennerhassett HPI_COBRANET_SEND_PACKET = HPI_CTL_ATTR(COBRANET, 6), 2153285ea10SEliot Blennerhassett HPI_COBRANET_GET_PACKET = HPI_CTL_ATTR(COBRANET, 7), 2163285ea10SEliot Blennerhassett 2173285ea10SEliot Blennerhassett HPI_TONEDETECTOR_THRESHOLD = HPI_CTL_ATTR(TONEDETECTOR, 1), 2183285ea10SEliot Blennerhassett HPI_TONEDETECTOR_STATE = HPI_CTL_ATTR(TONEDETECTOR, 2), 2193285ea10SEliot Blennerhassett HPI_TONEDETECTOR_FREQUENCY = HPI_CTL_ATTR(TONEDETECTOR, 3), 2203285ea10SEliot Blennerhassett 2213285ea10SEliot Blennerhassett HPI_SILENCEDETECTOR_THRESHOLD = HPI_CTL_ATTR(SILENCEDETECTOR, 1), 2223285ea10SEliot Blennerhassett HPI_SILENCEDETECTOR_STATE = HPI_CTL_ATTR(SILENCEDETECTOR, 2), 2233285ea10SEliot Blennerhassett HPI_SILENCEDETECTOR_DELAY = HPI_CTL_ATTR(SILENCEDETECTOR, 3), 2243285ea10SEliot Blennerhassett 2253285ea10SEliot Blennerhassett HPI_PAD_CHANNEL_NAME = HPI_CTL_ATTR(PAD, 1), 2263285ea10SEliot Blennerhassett HPI_PAD_ARTIST = HPI_CTL_ATTR(PAD, 2), 2273285ea10SEliot Blennerhassett HPI_PAD_TITLE = HPI_CTL_ATTR(PAD, 3), 2283285ea10SEliot Blennerhassett HPI_PAD_COMMENT = HPI_CTL_ATTR(PAD, 4), 2293285ea10SEliot Blennerhassett HPI_PAD_PROGRAM_TYPE = HPI_CTL_ATTR(PAD, 5), 2303285ea10SEliot Blennerhassett HPI_PAD_PROGRAM_ID = HPI_CTL_ATTR(PAD, 6), 2313285ea10SEliot Blennerhassett HPI_PAD_TA_SUPPORT = HPI_CTL_ATTR(PAD, 7), 23272868339SEliot Blennerhassett HPI_PAD_TA_ACTIVE = HPI_CTL_ATTR(PAD, 8), 23372868339SEliot Blennerhassett 23472868339SEliot Blennerhassett HPI_UNIVERSAL_ENTITY = HPI_CTL_ATTR(UNIVERSAL, 1) 2353285ea10SEliot Blennerhassett }; 236719f82d3SEliot Blennerhassett 237719f82d3SEliot Blennerhassett #define HPI_POLARITY_POSITIVE 0 238719f82d3SEliot Blennerhassett #define HPI_POLARITY_NEGATIVE 1 239719f82d3SEliot Blennerhassett 240719f82d3SEliot Blennerhassett /*------------------------------------------------------------ 241719f82d3SEliot Blennerhassett Cobranet Chip Bridge - copied from HMI.H 242719f82d3SEliot Blennerhassett ------------------------------------------------------------*/ 243719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_bridge 0x20000 244719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_bridge_tx_pkt_buf \ 245719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_bridge + 0x1000) 246719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_bridge_rx_pkt_buf \ 247719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_bridge + 0x2000) 248719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_if_table1 0x110000 249719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_if_phy_address \ 250719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_if_table1 + 0xd) 251719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_protocolIP 0x72000 252719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_ip_mon_currentIP \ 253719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_protocolIP + 0x0) 254719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_ip_mon_staticIP \ 255719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_protocolIP + 0x2) 256719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_sys 0x100000 257719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_sys_desc \ 258719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_sys + 0x0) 259719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_sys_objectID \ 260719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_sys + 0x100) 261719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_sys_contact \ 262719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_sys + 0x200) 263719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_sys_name \ 264719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_sys + 0x300) 265719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_sys_location \ 266719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_sys + 0x400) 267719f82d3SEliot Blennerhassett 268719f82d3SEliot Blennerhassett /*------------------------------------------------------------ 269719f82d3SEliot Blennerhassett Cobranet Chip Status bits 270719f82d3SEliot Blennerhassett ------------------------------------------------------------*/ 271719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_STATUS_RXPACKET 2 272719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_STATUS_TXPACKET 3 273719f82d3SEliot Blennerhassett 274719f82d3SEliot Blennerhassett /*------------------------------------------------------------ 275719f82d3SEliot Blennerhassett Ethernet header size 276719f82d3SEliot Blennerhassett ------------------------------------------------------------*/ 277719f82d3SEliot Blennerhassett #define HPI_ETHERNET_HEADER_SIZE (16) 278719f82d3SEliot Blennerhassett 279719f82d3SEliot Blennerhassett /* These defines are used to fill in protocol information for an Ethernet packet 280719f82d3SEliot Blennerhassett sent using HMI on CS18102 */ 2816d0b898eSEliot Blennerhassett /** ID supplied by Cirrus for ASI packets. */ 282719f82d3SEliot Blennerhassett #define HPI_ETHERNET_PACKET_ID 0x85 283719f82d3SEliot Blennerhassett /** Simple packet - no special routing required */ 284719f82d3SEliot Blennerhassett #define HPI_ETHERNET_PACKET_V1 0x01 285719f82d3SEliot Blennerhassett /** This packet must make its way to the host across the HPI interface */ 286719f82d3SEliot Blennerhassett #define HPI_ETHERNET_PACKET_HOSTED_VIA_HMI 0x20 287719f82d3SEliot Blennerhassett /** This packet must make its way to the host across the HPI interface */ 288719f82d3SEliot Blennerhassett #define HPI_ETHERNET_PACKET_HOSTED_VIA_HMI_V1 0x21 289719f82d3SEliot Blennerhassett /** This packet must make its way to the host across the HPI interface */ 290719f82d3SEliot Blennerhassett #define HPI_ETHERNET_PACKET_HOSTED_VIA_HPI 0x40 291719f82d3SEliot Blennerhassett /** This packet must make its way to the host across the HPI interface */ 292719f82d3SEliot Blennerhassett #define HPI_ETHERNET_PACKET_HOSTED_VIA_HPI_V1 0x41 293719f82d3SEliot Blennerhassett 2946d0b898eSEliot Blennerhassett #define HPI_ETHERNET_UDP_PORT 44600 /**< HPI UDP service */ 295719f82d3SEliot Blennerhassett 296a287ca2aSEliot Blennerhassett /** Default network timeout in milli-seconds. */ 297a287ca2aSEliot Blennerhassett #define HPI_ETHERNET_TIMEOUT_MS 500 298719f82d3SEliot Blennerhassett 2993285ea10SEliot Blennerhassett /** Locked memory buffer alloc/free phases */ 3003285ea10SEliot Blennerhassett enum HPI_BUFFER_CMDS { 301719f82d3SEliot Blennerhassett /** use one message to allocate or free physical memory */ 3023285ea10SEliot Blennerhassett HPI_BUFFER_CMD_EXTERNAL = 0, 303719f82d3SEliot Blennerhassett /** alloc physical memory */ 3043285ea10SEliot Blennerhassett HPI_BUFFER_CMD_INTERNAL_ALLOC = 1, 305719f82d3SEliot Blennerhassett /** send physical memory address to adapter */ 3063285ea10SEliot Blennerhassett HPI_BUFFER_CMD_INTERNAL_GRANTADAPTER = 2, 307719f82d3SEliot Blennerhassett /** notify adapter to stop using physical buffer */ 3083285ea10SEliot Blennerhassett HPI_BUFFER_CMD_INTERNAL_REVOKEADAPTER = 3, 309719f82d3SEliot Blennerhassett /** free physical buffer */ 3103285ea10SEliot Blennerhassett HPI_BUFFER_CMD_INTERNAL_FREE = 4 3113285ea10SEliot Blennerhassett }; 312719f82d3SEliot Blennerhassett 313719f82d3SEliot Blennerhassett /*****************************************************************************/ 314719f82d3SEliot Blennerhassett /*****************************************************************************/ 315719f82d3SEliot Blennerhassett /******** HPI LOW LEVEL MESSAGES *******/ 316719f82d3SEliot Blennerhassett /*****************************************************************************/ 317719f82d3SEliot Blennerhassett /*****************************************************************************/ 318719f82d3SEliot Blennerhassett /** Pnp ids */ 319719f82d3SEliot Blennerhassett /** "ASI" - actual is "ASX" - need to change */ 320719f82d3SEliot Blennerhassett #define HPI_ID_ISAPNP_AUDIOSCIENCE 0x0669 321719f82d3SEliot Blennerhassett /** PCI vendor ID that AudioScience uses */ 322719f82d3SEliot Blennerhassett #define HPI_PCI_VENDOR_ID_AUDIOSCIENCE 0x175C 323719f82d3SEliot Blennerhassett /** PCI vendor ID that the DSP56301 has */ 324719f82d3SEliot Blennerhassett #define HPI_PCI_VENDOR_ID_MOTOROLA 0x1057 325719f82d3SEliot Blennerhassett /** PCI vendor ID that TI uses */ 326719f82d3SEliot Blennerhassett #define HPI_PCI_VENDOR_ID_TI 0x104C 327719f82d3SEliot Blennerhassett 328719f82d3SEliot Blennerhassett #define HPI_PCI_DEV_ID_PCI2040 0xAC60 329719f82d3SEliot Blennerhassett /** TI's C6205 PCI interface has this ID */ 330719f82d3SEliot Blennerhassett #define HPI_PCI_DEV_ID_DSP6205 0xA106 331719f82d3SEliot Blennerhassett 332719f82d3SEliot Blennerhassett #define HPI_USB_VENDOR_ID_AUDIOSCIENCE 0x1257 333719f82d3SEliot Blennerhassett #define HPI_USB_W2K_TAG 0x57495341 /* "ASIW" */ 334719f82d3SEliot Blennerhassett #define HPI_USB_LINUX_TAG 0x4C495341 /* "ASIL" */ 335719f82d3SEliot Blennerhassett 3363285ea10SEliot Blennerhassett /** Invalid Adapter index 3373285ea10SEliot Blennerhassett Used in HPI messages that are not addressed to a specific adapter 3383285ea10SEliot Blennerhassett Used in DLL to indicate device not present 3393285ea10SEliot Blennerhassett */ 3403285ea10SEliot Blennerhassett #define HPI_ADAPTER_INDEX_INVALID 0xFFFF 3413285ea10SEliot Blennerhassett 342719f82d3SEliot Blennerhassett /** First 2 hex digits define the adapter family */ 343719f82d3SEliot Blennerhassett #define HPI_ADAPTER_FAMILY_MASK 0xff00 3445a498ef1SEliot Blennerhassett #define HPI_MODULE_FAMILY_MASK 0xfff0 345719f82d3SEliot Blennerhassett 346719f82d3SEliot Blennerhassett #define HPI_ADAPTER_FAMILY_ASI(f) (f & HPI_ADAPTER_FAMILY_MASK) 3475a498ef1SEliot Blennerhassett #define HPI_MODULE_FAMILY_ASI(f) (f & HPI_MODULE_FAMILY_MASK) 348719f82d3SEliot Blennerhassett #define HPI_ADAPTER_ASI(f) (f) 349719f82d3SEliot Blennerhassett 3503285ea10SEliot Blennerhassett enum HPI_MESSAGE_TYPES { 35182b5774fSEliot Blennerhassett HPI_TYPE_REQUEST = 1, 3523285ea10SEliot Blennerhassett HPI_TYPE_RESPONSE = 2, 3533285ea10SEliot Blennerhassett HPI_TYPE_DATA = 3, 354b7f12482SEliot Blennerhassett HPI_TYPE_SSX2BYPASS_MESSAGE = 4, 355b7f12482SEliot Blennerhassett HPI_TYPE_COMMAND = 5, 356b7f12482SEliot Blennerhassett HPI_TYPE_NOTIFICATION = 6 3573285ea10SEliot Blennerhassett }; 358719f82d3SEliot Blennerhassett 3593285ea10SEliot Blennerhassett enum HPI_OBJECT_TYPES { 3603285ea10SEliot Blennerhassett HPI_OBJ_SUBSYSTEM = 1, 3613285ea10SEliot Blennerhassett HPI_OBJ_ADAPTER = 2, 3623285ea10SEliot Blennerhassett HPI_OBJ_OSTREAM = 3, 3633285ea10SEliot Blennerhassett HPI_OBJ_ISTREAM = 4, 3643285ea10SEliot Blennerhassett HPI_OBJ_MIXER = 5, 3653285ea10SEliot Blennerhassett HPI_OBJ_NODE = 6, 3663285ea10SEliot Blennerhassett HPI_OBJ_CONTROL = 7, 3673285ea10SEliot Blennerhassett HPI_OBJ_NVMEMORY = 8, 3683285ea10SEliot Blennerhassett HPI_OBJ_GPIO = 9, 3693285ea10SEliot Blennerhassett HPI_OBJ_WATCHDOG = 10, 3703285ea10SEliot Blennerhassett HPI_OBJ_CLOCK = 11, 3713285ea10SEliot Blennerhassett HPI_OBJ_PROFILE = 12, 37258fbf77fSEliot Blennerhassett /* HPI_ OBJ_ CONTROLEX = 13, */ 3733285ea10SEliot Blennerhassett HPI_OBJ_ASYNCEVENT = 14 374719f82d3SEliot Blennerhassett #define HPI_OBJ_MAXINDEX 14 3753285ea10SEliot Blennerhassett }; 376719f82d3SEliot Blennerhassett 377719f82d3SEliot Blennerhassett #define HPI_OBJ_FUNCTION_SPACING 0x100 378a287ca2aSEliot Blennerhassett #define HPI_FUNC_ID(obj, i) (HPI_OBJ_##obj * HPI_OBJ_FUNCTION_SPACING + i) 3793285ea10SEliot Blennerhassett 380719f82d3SEliot Blennerhassett #define HPI_EXTRACT_INDEX(fn) (fn & 0xff) 381719f82d3SEliot Blennerhassett 3823285ea10SEliot Blennerhassett enum HPI_FUNCTION_IDS { 3833285ea10SEliot Blennerhassett HPI_SUBSYS_OPEN = HPI_FUNC_ID(SUBSYSTEM, 1), 3843285ea10SEliot Blennerhassett HPI_SUBSYS_GET_VERSION = HPI_FUNC_ID(SUBSYSTEM, 2), 3853285ea10SEliot Blennerhassett HPI_SUBSYS_GET_INFO = HPI_FUNC_ID(SUBSYSTEM, 3), 3863285ea10SEliot Blennerhassett HPI_SUBSYS_CREATE_ADAPTER = HPI_FUNC_ID(SUBSYSTEM, 5), 3873285ea10SEliot Blennerhassett HPI_SUBSYS_CLOSE = HPI_FUNC_ID(SUBSYSTEM, 6), 3883285ea10SEliot Blennerhassett HPI_SUBSYS_DRIVER_LOAD = HPI_FUNC_ID(SUBSYSTEM, 8), 3893285ea10SEliot Blennerhassett HPI_SUBSYS_DRIVER_UNLOAD = HPI_FUNC_ID(SUBSYSTEM, 9), 3903285ea10SEliot Blennerhassett HPI_SUBSYS_GET_NUM_ADAPTERS = HPI_FUNC_ID(SUBSYSTEM, 12), 3913285ea10SEliot Blennerhassett HPI_SUBSYS_GET_ADAPTER = HPI_FUNC_ID(SUBSYSTEM, 13), 3923285ea10SEliot Blennerhassett HPI_SUBSYS_SET_NETWORK_INTERFACE = HPI_FUNC_ID(SUBSYSTEM, 14), 3933285ea10SEliot Blennerhassett HPI_SUBSYS_OPTION_INFO = HPI_FUNC_ID(SUBSYSTEM, 15), 3943285ea10SEliot Blennerhassett HPI_SUBSYS_OPTION_GET = HPI_FUNC_ID(SUBSYSTEM, 16), 3953285ea10SEliot Blennerhassett HPI_SUBSYS_OPTION_SET = HPI_FUNC_ID(SUBSYSTEM, 17), 3963285ea10SEliot Blennerhassett #define HPI_SUBSYS_FUNCTION_COUNT 17 3973285ea10SEliot Blennerhassett 3983285ea10SEliot Blennerhassett HPI_ADAPTER_OPEN = HPI_FUNC_ID(ADAPTER, 1), 3993285ea10SEliot Blennerhassett HPI_ADAPTER_CLOSE = HPI_FUNC_ID(ADAPTER, 2), 4003285ea10SEliot Blennerhassett HPI_ADAPTER_GET_INFO = HPI_FUNC_ID(ADAPTER, 3), 4013285ea10SEliot Blennerhassett HPI_ADAPTER_GET_ASSERT = HPI_FUNC_ID(ADAPTER, 4), 4023285ea10SEliot Blennerhassett HPI_ADAPTER_TEST_ASSERT = HPI_FUNC_ID(ADAPTER, 5), 4033285ea10SEliot Blennerhassett HPI_ADAPTER_SET_MODE = HPI_FUNC_ID(ADAPTER, 6), 4043285ea10SEliot Blennerhassett HPI_ADAPTER_GET_MODE = HPI_FUNC_ID(ADAPTER, 7), 4053285ea10SEliot Blennerhassett HPI_ADAPTER_ENABLE_CAPABILITY = HPI_FUNC_ID(ADAPTER, 8), 4063285ea10SEliot Blennerhassett HPI_ADAPTER_SELFTEST = HPI_FUNC_ID(ADAPTER, 9), 4073285ea10SEliot Blennerhassett HPI_ADAPTER_FIND_OBJECT = HPI_FUNC_ID(ADAPTER, 10), 4083285ea10SEliot Blennerhassett HPI_ADAPTER_QUERY_FLASH = HPI_FUNC_ID(ADAPTER, 11), 4093285ea10SEliot Blennerhassett HPI_ADAPTER_START_FLASH = HPI_FUNC_ID(ADAPTER, 12), 4103285ea10SEliot Blennerhassett HPI_ADAPTER_PROGRAM_FLASH = HPI_FUNC_ID(ADAPTER, 13), 4113285ea10SEliot Blennerhassett HPI_ADAPTER_SET_PROPERTY = HPI_FUNC_ID(ADAPTER, 14), 4123285ea10SEliot Blennerhassett HPI_ADAPTER_GET_PROPERTY = HPI_FUNC_ID(ADAPTER, 15), 4133285ea10SEliot Blennerhassett HPI_ADAPTER_ENUM_PROPERTY = HPI_FUNC_ID(ADAPTER, 16), 4143285ea10SEliot Blennerhassett HPI_ADAPTER_MODULE_INFO = HPI_FUNC_ID(ADAPTER, 17), 4153285ea10SEliot Blennerhassett HPI_ADAPTER_DEBUG_READ = HPI_FUNC_ID(ADAPTER, 18), 416bd33c1caSEliot Blennerhassett HPI_ADAPTER_IRQ_QUERY_AND_CLEAR = HPI_FUNC_ID(ADAPTER, 19), 417bd33c1caSEliot Blennerhassett HPI_ADAPTER_IRQ_CALLBACK = HPI_FUNC_ID(ADAPTER, 20), 4186d0b898eSEliot Blennerhassett HPI_ADAPTER_DELETE = HPI_FUNC_ID(ADAPTER, 21), 41972868339SEliot Blennerhassett HPI_ADAPTER_READ_FLASH = HPI_FUNC_ID(ADAPTER, 22), 42072868339SEliot Blennerhassett HPI_ADAPTER_END_FLASH = HPI_FUNC_ID(ADAPTER, 23), 42172868339SEliot Blennerhassett HPI_ADAPTER_FILESTORE_DELETE_ALL = HPI_FUNC_ID(ADAPTER, 24), 42272868339SEliot Blennerhassett #define HPI_ADAPTER_FUNCTION_COUNT 24 4233285ea10SEliot Blennerhassett 4243285ea10SEliot Blennerhassett HPI_OSTREAM_OPEN = HPI_FUNC_ID(OSTREAM, 1), 4253285ea10SEliot Blennerhassett HPI_OSTREAM_CLOSE = HPI_FUNC_ID(OSTREAM, 2), 4263285ea10SEliot Blennerhassett HPI_OSTREAM_WRITE = HPI_FUNC_ID(OSTREAM, 3), 4273285ea10SEliot Blennerhassett HPI_OSTREAM_START = HPI_FUNC_ID(OSTREAM, 4), 4283285ea10SEliot Blennerhassett HPI_OSTREAM_STOP = HPI_FUNC_ID(OSTREAM, 5), 4293285ea10SEliot Blennerhassett HPI_OSTREAM_RESET = HPI_FUNC_ID(OSTREAM, 6), 4303285ea10SEliot Blennerhassett HPI_OSTREAM_GET_INFO = HPI_FUNC_ID(OSTREAM, 7), 4313285ea10SEliot Blennerhassett HPI_OSTREAM_QUERY_FORMAT = HPI_FUNC_ID(OSTREAM, 8), 4323285ea10SEliot Blennerhassett HPI_OSTREAM_DATA = HPI_FUNC_ID(OSTREAM, 9), 4333285ea10SEliot Blennerhassett HPI_OSTREAM_SET_VELOCITY = HPI_FUNC_ID(OSTREAM, 10), 4343285ea10SEliot Blennerhassett HPI_OSTREAM_SET_PUNCHINOUT = HPI_FUNC_ID(OSTREAM, 11), 4353285ea10SEliot Blennerhassett HPI_OSTREAM_SINEGEN = HPI_FUNC_ID(OSTREAM, 12), 4363285ea10SEliot Blennerhassett HPI_OSTREAM_ANC_RESET = HPI_FUNC_ID(OSTREAM, 13), 4373285ea10SEliot Blennerhassett HPI_OSTREAM_ANC_GET_INFO = HPI_FUNC_ID(OSTREAM, 14), 4383285ea10SEliot Blennerhassett HPI_OSTREAM_ANC_READ = HPI_FUNC_ID(OSTREAM, 15), 4393285ea10SEliot Blennerhassett HPI_OSTREAM_SET_TIMESCALE = HPI_FUNC_ID(OSTREAM, 16), 4403285ea10SEliot Blennerhassett HPI_OSTREAM_SET_FORMAT = HPI_FUNC_ID(OSTREAM, 17), 4413285ea10SEliot Blennerhassett HPI_OSTREAM_HOSTBUFFER_ALLOC = HPI_FUNC_ID(OSTREAM, 18), 4423285ea10SEliot Blennerhassett HPI_OSTREAM_HOSTBUFFER_FREE = HPI_FUNC_ID(OSTREAM, 19), 4433285ea10SEliot Blennerhassett HPI_OSTREAM_GROUP_ADD = HPI_FUNC_ID(OSTREAM, 20), 4443285ea10SEliot Blennerhassett HPI_OSTREAM_GROUP_GETMAP = HPI_FUNC_ID(OSTREAM, 21), 4453285ea10SEliot Blennerhassett HPI_OSTREAM_GROUP_RESET = HPI_FUNC_ID(OSTREAM, 22), 4463285ea10SEliot Blennerhassett HPI_OSTREAM_HOSTBUFFER_GET_INFO = HPI_FUNC_ID(OSTREAM, 23), 4473285ea10SEliot Blennerhassett HPI_OSTREAM_WAIT_START = HPI_FUNC_ID(OSTREAM, 24), 448bd33c1caSEliot Blennerhassett HPI_OSTREAM_WAIT = HPI_FUNC_ID(OSTREAM, 25), 449bd33c1caSEliot Blennerhassett #define HPI_OSTREAM_FUNCTION_COUNT 25 4503285ea10SEliot Blennerhassett 4513285ea10SEliot Blennerhassett HPI_ISTREAM_OPEN = HPI_FUNC_ID(ISTREAM, 1), 4523285ea10SEliot Blennerhassett HPI_ISTREAM_CLOSE = HPI_FUNC_ID(ISTREAM, 2), 4533285ea10SEliot Blennerhassett HPI_ISTREAM_SET_FORMAT = HPI_FUNC_ID(ISTREAM, 3), 4543285ea10SEliot Blennerhassett HPI_ISTREAM_READ = HPI_FUNC_ID(ISTREAM, 4), 4553285ea10SEliot Blennerhassett HPI_ISTREAM_START = HPI_FUNC_ID(ISTREAM, 5), 4563285ea10SEliot Blennerhassett HPI_ISTREAM_STOP = HPI_FUNC_ID(ISTREAM, 6), 4573285ea10SEliot Blennerhassett HPI_ISTREAM_RESET = HPI_FUNC_ID(ISTREAM, 7), 4583285ea10SEliot Blennerhassett HPI_ISTREAM_GET_INFO = HPI_FUNC_ID(ISTREAM, 8), 4593285ea10SEliot Blennerhassett HPI_ISTREAM_QUERY_FORMAT = HPI_FUNC_ID(ISTREAM, 9), 4603285ea10SEliot Blennerhassett HPI_ISTREAM_ANC_RESET = HPI_FUNC_ID(ISTREAM, 10), 4613285ea10SEliot Blennerhassett HPI_ISTREAM_ANC_GET_INFO = HPI_FUNC_ID(ISTREAM, 11), 4623285ea10SEliot Blennerhassett HPI_ISTREAM_ANC_WRITE = HPI_FUNC_ID(ISTREAM, 12), 4633285ea10SEliot Blennerhassett HPI_ISTREAM_HOSTBUFFER_ALLOC = HPI_FUNC_ID(ISTREAM, 13), 4643285ea10SEliot Blennerhassett HPI_ISTREAM_HOSTBUFFER_FREE = HPI_FUNC_ID(ISTREAM, 14), 4653285ea10SEliot Blennerhassett HPI_ISTREAM_GROUP_ADD = HPI_FUNC_ID(ISTREAM, 15), 4663285ea10SEliot Blennerhassett HPI_ISTREAM_GROUP_GETMAP = HPI_FUNC_ID(ISTREAM, 16), 4673285ea10SEliot Blennerhassett HPI_ISTREAM_GROUP_RESET = HPI_FUNC_ID(ISTREAM, 17), 4683285ea10SEliot Blennerhassett HPI_ISTREAM_HOSTBUFFER_GET_INFO = HPI_FUNC_ID(ISTREAM, 18), 4693285ea10SEliot Blennerhassett HPI_ISTREAM_WAIT_START = HPI_FUNC_ID(ISTREAM, 19), 470bd33c1caSEliot Blennerhassett HPI_ISTREAM_WAIT = HPI_FUNC_ID(ISTREAM, 20), 471bd33c1caSEliot Blennerhassett #define HPI_ISTREAM_FUNCTION_COUNT 20 4723285ea10SEliot Blennerhassett 473719f82d3SEliot Blennerhassett /* NOTE: 474719f82d3SEliot Blennerhassett GET_NODE_INFO, SET_CONNECTION, GET_CONNECTIONS are not currently used */ 4753285ea10SEliot Blennerhassett HPI_MIXER_OPEN = HPI_FUNC_ID(MIXER, 1), 4763285ea10SEliot Blennerhassett HPI_MIXER_CLOSE = HPI_FUNC_ID(MIXER, 2), 4773285ea10SEliot Blennerhassett HPI_MIXER_GET_INFO = HPI_FUNC_ID(MIXER, 3), 4783285ea10SEliot Blennerhassett HPI_MIXER_GET_NODE_INFO = HPI_FUNC_ID(MIXER, 4), 4793285ea10SEliot Blennerhassett HPI_MIXER_GET_CONTROL = HPI_FUNC_ID(MIXER, 5), 4803285ea10SEliot Blennerhassett HPI_MIXER_SET_CONNECTION = HPI_FUNC_ID(MIXER, 6), 4813285ea10SEliot Blennerhassett HPI_MIXER_GET_CONNECTIONS = HPI_FUNC_ID(MIXER, 7), 4823285ea10SEliot Blennerhassett HPI_MIXER_GET_CONTROL_BY_INDEX = HPI_FUNC_ID(MIXER, 8), 4833285ea10SEliot Blennerhassett HPI_MIXER_GET_CONTROL_ARRAY_BY_INDEX = HPI_FUNC_ID(MIXER, 9), 4843285ea10SEliot Blennerhassett HPI_MIXER_GET_CONTROL_MULTIPLE_VALUES = HPI_FUNC_ID(MIXER, 10), 4853285ea10SEliot Blennerhassett HPI_MIXER_STORE = HPI_FUNC_ID(MIXER, 11), 486bd33c1caSEliot Blennerhassett HPI_MIXER_GET_CACHE_INFO = HPI_FUNC_ID(MIXER, 12), 48772868339SEliot Blennerhassett HPI_MIXER_GET_BLOCK_HANDLE = HPI_FUNC_ID(MIXER, 13), 48872868339SEliot Blennerhassett HPI_MIXER_GET_PARAMETER_HANDLE = HPI_FUNC_ID(MIXER, 14), 48972868339SEliot Blennerhassett #define HPI_MIXER_FUNCTION_COUNT 14 4903285ea10SEliot Blennerhassett 4913285ea10SEliot Blennerhassett HPI_CONTROL_GET_INFO = HPI_FUNC_ID(CONTROL, 1), 4923285ea10SEliot Blennerhassett HPI_CONTROL_GET_STATE = HPI_FUNC_ID(CONTROL, 2), 4933285ea10SEliot Blennerhassett HPI_CONTROL_SET_STATE = HPI_FUNC_ID(CONTROL, 3), 494719f82d3SEliot Blennerhassett #define HPI_CONTROL_FUNCTION_COUNT 3 4953285ea10SEliot Blennerhassett 4963285ea10SEliot Blennerhassett HPI_NVMEMORY_OPEN = HPI_FUNC_ID(NVMEMORY, 1), 4973285ea10SEliot Blennerhassett HPI_NVMEMORY_READ_BYTE = HPI_FUNC_ID(NVMEMORY, 2), 4983285ea10SEliot Blennerhassett HPI_NVMEMORY_WRITE_BYTE = HPI_FUNC_ID(NVMEMORY, 3), 499719f82d3SEliot Blennerhassett #define HPI_NVMEMORY_FUNCTION_COUNT 3 5003285ea10SEliot Blennerhassett 5013285ea10SEliot Blennerhassett HPI_GPIO_OPEN = HPI_FUNC_ID(GPIO, 1), 5023285ea10SEliot Blennerhassett HPI_GPIO_READ_BIT = HPI_FUNC_ID(GPIO, 2), 5033285ea10SEliot Blennerhassett HPI_GPIO_WRITE_BIT = HPI_FUNC_ID(GPIO, 3), 5043285ea10SEliot Blennerhassett HPI_GPIO_READ_ALL = HPI_FUNC_ID(GPIO, 4), 5053285ea10SEliot Blennerhassett HPI_GPIO_WRITE_STATUS = HPI_FUNC_ID(GPIO, 5), 506719f82d3SEliot Blennerhassett #define HPI_GPIO_FUNCTION_COUNT 5 5073285ea10SEliot Blennerhassett 5083285ea10SEliot Blennerhassett HPI_ASYNCEVENT_OPEN = HPI_FUNC_ID(ASYNCEVENT, 1), 5093285ea10SEliot Blennerhassett HPI_ASYNCEVENT_CLOSE = HPI_FUNC_ID(ASYNCEVENT, 2), 5103285ea10SEliot Blennerhassett HPI_ASYNCEVENT_WAIT = HPI_FUNC_ID(ASYNCEVENT, 3), 5113285ea10SEliot Blennerhassett HPI_ASYNCEVENT_GETCOUNT = HPI_FUNC_ID(ASYNCEVENT, 4), 5123285ea10SEliot Blennerhassett HPI_ASYNCEVENT_GET = HPI_FUNC_ID(ASYNCEVENT, 5), 5133285ea10SEliot Blennerhassett HPI_ASYNCEVENT_SENDEVENTS = HPI_FUNC_ID(ASYNCEVENT, 6), 514719f82d3SEliot Blennerhassett #define HPI_ASYNCEVENT_FUNCTION_COUNT 6 5153285ea10SEliot Blennerhassett 5163285ea10SEliot Blennerhassett HPI_WATCHDOG_OPEN = HPI_FUNC_ID(WATCHDOG, 1), 5173285ea10SEliot Blennerhassett HPI_WATCHDOG_SET_TIME = HPI_FUNC_ID(WATCHDOG, 2), 5183285ea10SEliot Blennerhassett HPI_WATCHDOG_PING = HPI_FUNC_ID(WATCHDOG, 3), 5193285ea10SEliot Blennerhassett 5203285ea10SEliot Blennerhassett HPI_CLOCK_OPEN = HPI_FUNC_ID(CLOCK, 1), 5213285ea10SEliot Blennerhassett HPI_CLOCK_SET_TIME = HPI_FUNC_ID(CLOCK, 2), 5223285ea10SEliot Blennerhassett HPI_CLOCK_GET_TIME = HPI_FUNC_ID(CLOCK, 3), 5233285ea10SEliot Blennerhassett 5243285ea10SEliot Blennerhassett HPI_PROFILE_OPEN_ALL = HPI_FUNC_ID(PROFILE, 1), 5253285ea10SEliot Blennerhassett HPI_PROFILE_START_ALL = HPI_FUNC_ID(PROFILE, 2), 5263285ea10SEliot Blennerhassett HPI_PROFILE_STOP_ALL = HPI_FUNC_ID(PROFILE, 3), 5273285ea10SEliot Blennerhassett HPI_PROFILE_GET = HPI_FUNC_ID(PROFILE, 4), 5283285ea10SEliot Blennerhassett HPI_PROFILE_GET_IDLECOUNT = HPI_FUNC_ID(PROFILE, 5), 5293285ea10SEliot Blennerhassett HPI_PROFILE_GET_NAME = HPI_FUNC_ID(PROFILE, 6), 5303285ea10SEliot Blennerhassett HPI_PROFILE_GET_UTILIZATION = HPI_FUNC_ID(PROFILE, 7) 531719f82d3SEliot Blennerhassett #define HPI_PROFILE_FUNCTION_COUNT 7 5323285ea10SEliot Blennerhassett }; 533719f82d3SEliot Blennerhassett 534719f82d3SEliot Blennerhassett /* ////////////////////////////////////////////////////////////////////// */ 535719f82d3SEliot Blennerhassett /* STRUCTURES */ 536719f82d3SEliot Blennerhassett #ifndef DISABLE_PRAGMA_PACK1 537719f82d3SEliot Blennerhassett #pragma pack(push, 1) 538719f82d3SEliot Blennerhassett #endif 539719f82d3SEliot Blennerhassett 540719f82d3SEliot Blennerhassett /** PCI bus resource */ 541719f82d3SEliot Blennerhassett struct hpi_pci { 542719f82d3SEliot Blennerhassett u32 __iomem *ap_mem_base[HPI_MAX_ADAPTER_MEM_SPACES]; 5433285ea10SEliot Blennerhassett struct pci_dev *pci_dev; 544719f82d3SEliot Blennerhassett }; 545719f82d3SEliot Blennerhassett 546e51c58c9SEliot Blennerhassett /** Adapter specification resource */ 547e51c58c9SEliot Blennerhassett struct hpi_adapter_specification { 548e51c58c9SEliot Blennerhassett u32 type; 549e51c58c9SEliot Blennerhassett u8 modules[4]; 550e51c58c9SEliot Blennerhassett }; 551e51c58c9SEliot Blennerhassett 552719f82d3SEliot Blennerhassett struct hpi_resource { 553719f82d3SEliot Blennerhassett union { 554719f82d3SEliot Blennerhassett const struct hpi_pci *pci; 555719f82d3SEliot Blennerhassett const char *net_if; 556e51c58c9SEliot Blennerhassett struct hpi_adapter_specification adapter_spec; 557e51c58c9SEliot Blennerhassett const void *sw_if; 558719f82d3SEliot Blennerhassett } r; 559719f82d3SEliot Blennerhassett u16 bus_type; /* HPI_BUS_PNPISA, _PCI, _USB etc */ 560719f82d3SEliot Blennerhassett u16 padding; 561719f82d3SEliot Blennerhassett }; 562719f82d3SEliot Blennerhassett 563719f82d3SEliot Blennerhassett /** Format info used inside struct hpi_message 564719f82d3SEliot Blennerhassett Not the same as public API struct hpi_format */ 565719f82d3SEliot Blennerhassett struct hpi_msg_format { 5661d595d2aSEliot Blennerhassett u32 sample_rate; /**< 11025, 32000, 44100 etc. */ 567719f82d3SEliot Blennerhassett u32 bit_rate; /**< for MPEG */ 5681d595d2aSEliot Blennerhassett u32 attributes; /**< stereo/joint_stereo/mono */ 569719f82d3SEliot Blennerhassett u16 channels; /**< 1,2..., (or ancillary mode or idle bit */ 570719f82d3SEliot Blennerhassett u16 format; /**< HPI_FORMAT_PCM16, _MPEG etc. see \ref HPI_FORMATS. */ 571719f82d3SEliot Blennerhassett }; 572719f82d3SEliot Blennerhassett 573719f82d3SEliot Blennerhassett /** Buffer+format structure. 574719f82d3SEliot Blennerhassett Must be kept 7 * 32 bits to match public struct hpi_datastruct */ 575719f82d3SEliot Blennerhassett struct hpi_msg_data { 576719f82d3SEliot Blennerhassett struct hpi_msg_format format; 577719f82d3SEliot Blennerhassett u8 *pb_data; 578e51c58c9SEliot Blennerhassett #ifndef CONFIG_64BIT 579719f82d3SEliot Blennerhassett u32 padding; 580719f82d3SEliot Blennerhassett #endif 581719f82d3SEliot Blennerhassett u32 data_size; 582719f82d3SEliot Blennerhassett }; 583719f82d3SEliot Blennerhassett 584719f82d3SEliot Blennerhassett /** struct hpi_datastructure used up to 3.04 driver */ 585719f82d3SEliot Blennerhassett struct hpi_data_legacy32 { 586719f82d3SEliot Blennerhassett struct hpi_format format; 587719f82d3SEliot Blennerhassett u32 pb_data; 588719f82d3SEliot Blennerhassett u32 data_size; 589719f82d3SEliot Blennerhassett }; 590719f82d3SEliot Blennerhassett 591e51c58c9SEliot Blennerhassett #ifdef CONFIG_64BIT 592719f82d3SEliot Blennerhassett /* Compatibility version of struct hpi_data*/ 593719f82d3SEliot Blennerhassett struct hpi_data_compat32 { 594719f82d3SEliot Blennerhassett struct hpi_msg_format format; 595719f82d3SEliot Blennerhassett u32 pb_data; 596719f82d3SEliot Blennerhassett u32 padding; 597719f82d3SEliot Blennerhassett u32 data_size; 598719f82d3SEliot Blennerhassett }; 599719f82d3SEliot Blennerhassett #endif 600719f82d3SEliot Blennerhassett 601719f82d3SEliot Blennerhassett struct hpi_buffer { 602938c565aSEliot Blennerhassett /** placeholder for backward compatibility (see dwBufferSize) */ 603719f82d3SEliot Blennerhassett struct hpi_msg_format reserved; 604719f82d3SEliot Blennerhassett u32 command; /**< HPI_BUFFER_CMD_xxx*/ 605719f82d3SEliot Blennerhassett u32 pci_address; /**< PCI physical address of buffer for DSP DMA */ 606719f82d3SEliot Blennerhassett u32 buffer_size; /**< must line up with data_size of HPI_DATA*/ 607719f82d3SEliot Blennerhassett }; 608719f82d3SEliot Blennerhassett 609719f82d3SEliot Blennerhassett /*/////////////////////////////////////////////////////////////////////////// */ 610719f82d3SEliot Blennerhassett /* This is used for background buffer bus mastering stream buffers. */ 611719f82d3SEliot Blennerhassett struct hpi_hostbuffer_status { 612719f82d3SEliot Blennerhassett u32 samples_processed; 613719f82d3SEliot Blennerhassett u32 auxiliary_data_available; 614719f82d3SEliot Blennerhassett u32 stream_state; 615719f82d3SEliot Blennerhassett /* DSP index in to the host bus master buffer. */ 6168e0874eaSEliot Blennerhassett u32 dsp_index; 617719f82d3SEliot Blennerhassett /* Host index in to the host bus master buffer. */ 618719f82d3SEliot Blennerhassett u32 host_index; 619719f82d3SEliot Blennerhassett u32 size_in_bytes; 620719f82d3SEliot Blennerhassett }; 621719f82d3SEliot Blennerhassett 622719f82d3SEliot Blennerhassett struct hpi_streamid { 623719f82d3SEliot Blennerhassett u16 object_type; 624719f82d3SEliot Blennerhassett /**< Type of object, HPI_OBJ_OSTREAM or HPI_OBJ_ISTREAM. */ 625719f82d3SEliot Blennerhassett u16 stream_index; /**< outstream or instream index. */ 626719f82d3SEliot Blennerhassett }; 627719f82d3SEliot Blennerhassett 628719f82d3SEliot Blennerhassett struct hpi_punchinout { 629719f82d3SEliot Blennerhassett u32 punch_in_sample; 630719f82d3SEliot Blennerhassett u32 punch_out_sample; 631719f82d3SEliot Blennerhassett }; 632719f82d3SEliot Blennerhassett 633719f82d3SEliot Blennerhassett struct hpi_subsys_msg { 634719f82d3SEliot Blennerhassett struct hpi_resource resource; 635719f82d3SEliot Blennerhassett }; 636719f82d3SEliot Blennerhassett 637719f82d3SEliot Blennerhassett struct hpi_subsys_res { 638719f82d3SEliot Blennerhassett u32 version; 6392f918a64SEliot Blennerhassett u32 data; /* extended version */ 6402f918a64SEliot Blennerhassett u16 num_adapters; 641719f82d3SEliot Blennerhassett u16 adapter_index; 6422f918a64SEliot Blennerhassett u16 adapter_type; 6432f918a64SEliot Blennerhassett u16 pad16; 644719f82d3SEliot Blennerhassett }; 645719f82d3SEliot Blennerhassett 646719f82d3SEliot Blennerhassett union hpi_adapterx_msg { 647719f82d3SEliot Blennerhassett struct { 6483285ea10SEliot Blennerhassett u32 dsp_address; 6493285ea10SEliot Blennerhassett u32 count_bytes; 6503285ea10SEliot Blennerhassett } debug_read; 651719f82d3SEliot Blennerhassett struct { 6523285ea10SEliot Blennerhassett u32 adapter_mode; 6533285ea10SEliot Blennerhassett u16 query_or_set; 6543285ea10SEliot Blennerhassett } mode; 6553285ea10SEliot Blennerhassett struct { 6563285ea10SEliot Blennerhassett u16 index; 6573285ea10SEliot Blennerhassett } module_info; 658719f82d3SEliot Blennerhassett struct { 659719f82d3SEliot Blennerhassett u16 index; 660719f82d3SEliot Blennerhassett u16 what; 661719f82d3SEliot Blennerhassett u16 property_index; 662719f82d3SEliot Blennerhassett } property_enum; 663719f82d3SEliot Blennerhassett struct { 6643285ea10SEliot Blennerhassett u16 property; 6653285ea10SEliot Blennerhassett u16 parameter1; 6663285ea10SEliot Blennerhassett u16 parameter2; 6673285ea10SEliot Blennerhassett } property_set; 668719f82d3SEliot Blennerhassett struct { 6693285ea10SEliot Blennerhassett u32 pad32; 6703285ea10SEliot Blennerhassett u16 key1; 6713285ea10SEliot Blennerhassett u16 key2; 6723285ea10SEliot Blennerhassett } restart; 6733285ea10SEliot Blennerhassett struct { 6743285ea10SEliot Blennerhassett u32 pad32; 6753285ea10SEliot Blennerhassett u16 value; 6763285ea10SEliot Blennerhassett } test_assert; 677bd33c1caSEliot Blennerhassett struct { 678f9a376c3SEliot Blennerhassett u32 message; 679f9a376c3SEliot Blennerhassett } irq; 680d8aefaefSEliot Blennerhassett u32 pad[3]; 681719f82d3SEliot Blennerhassett }; 682719f82d3SEliot Blennerhassett 683719f82d3SEliot Blennerhassett struct hpi_adapter_res { 684719f82d3SEliot Blennerhassett u32 serial_number; 685719f82d3SEliot Blennerhassett u16 adapter_type; 6863285ea10SEliot Blennerhassett u16 adapter_index; 687719f82d3SEliot Blennerhassett u16 num_instreams; 688719f82d3SEliot Blennerhassett u16 num_outstreams; 689719f82d3SEliot Blennerhassett u16 num_mixers; 690719f82d3SEliot Blennerhassett u16 version; 691719f82d3SEliot Blennerhassett u8 sz_adapter_assert[HPI_STRING_LEN]; 692719f82d3SEliot Blennerhassett }; 693719f82d3SEliot Blennerhassett 694719f82d3SEliot Blennerhassett union hpi_adapterx_res { 6953285ea10SEliot Blennerhassett struct hpi_adapter_res info; 696719f82d3SEliot Blennerhassett struct { 6973285ea10SEliot Blennerhassett u32 p1; 6983285ea10SEliot Blennerhassett u16 count; 6993285ea10SEliot Blennerhassett u16 dsp_index; 7003285ea10SEliot Blennerhassett u32 p2; 7013285ea10SEliot Blennerhassett u32 dsp_msg_addr; 7023285ea10SEliot Blennerhassett char sz_message[HPI_STRING_LEN]; 7033285ea10SEliot Blennerhassett } assert; 7043285ea10SEliot Blennerhassett struct { 7053285ea10SEliot Blennerhassett u32 adapter_mode; 7063285ea10SEliot Blennerhassett } mode; 707719f82d3SEliot Blennerhassett struct { 708719f82d3SEliot Blennerhassett u16 parameter1; 709719f82d3SEliot Blennerhassett u16 parameter2; 710719f82d3SEliot Blennerhassett } property_get; 7113285ea10SEliot Blennerhassett struct { 712bd33c1caSEliot Blennerhassett u32 yes; 713bd33c1caSEliot Blennerhassett } irq_query; 714719f82d3SEliot Blennerhassett }; 715719f82d3SEliot Blennerhassett 716719f82d3SEliot Blennerhassett struct hpi_stream_msg { 717719f82d3SEliot Blennerhassett union { 718719f82d3SEliot Blennerhassett struct hpi_msg_data data; 719719f82d3SEliot Blennerhassett struct hpi_data_legacy32 data32; 720719f82d3SEliot Blennerhassett u16 velocity; 721719f82d3SEliot Blennerhassett struct hpi_punchinout pio; 722719f82d3SEliot Blennerhassett u32 time_scale; 723719f82d3SEliot Blennerhassett struct hpi_buffer buffer; 724719f82d3SEliot Blennerhassett struct hpi_streamid stream; 725bd33c1caSEliot Blennerhassett u32 threshold_bytes; 726719f82d3SEliot Blennerhassett } u; 727719f82d3SEliot Blennerhassett }; 728719f82d3SEliot Blennerhassett 729719f82d3SEliot Blennerhassett struct hpi_stream_res { 730719f82d3SEliot Blennerhassett union { 731719f82d3SEliot Blennerhassett struct { 732719f82d3SEliot Blennerhassett /* size of hardware buffer */ 733719f82d3SEliot Blennerhassett u32 buffer_size; 734719f82d3SEliot Blennerhassett /* OutStream - data to play, 735719f82d3SEliot Blennerhassett InStream - data recorded */ 736719f82d3SEliot Blennerhassett u32 data_available; 737719f82d3SEliot Blennerhassett /* OutStream - samples played, 738719f82d3SEliot Blennerhassett InStream - samples recorded */ 739719f82d3SEliot Blennerhassett u32 samples_transferred; 740719f82d3SEliot Blennerhassett /* Adapter - OutStream - data to play, 741719f82d3SEliot Blennerhassett InStream - data recorded */ 742719f82d3SEliot Blennerhassett u32 auxiliary_data_available; 743719f82d3SEliot Blennerhassett u16 state; /* HPI_STATE_PLAYING, _STATE_STOPPED */ 744719f82d3SEliot Blennerhassett u16 padding; 745719f82d3SEliot Blennerhassett } stream_info; 746719f82d3SEliot Blennerhassett struct { 747719f82d3SEliot Blennerhassett u32 buffer_size; 748719f82d3SEliot Blennerhassett u32 data_available; 749719f82d3SEliot Blennerhassett u32 samples_transfered; 750719f82d3SEliot Blennerhassett u16 state; 751719f82d3SEliot Blennerhassett u16 outstream_index; 752719f82d3SEliot Blennerhassett u16 instream_index; 753719f82d3SEliot Blennerhassett u16 padding; 754719f82d3SEliot Blennerhassett u32 auxiliary_data_available; 755719f82d3SEliot Blennerhassett } legacy_stream_info; 756719f82d3SEliot Blennerhassett struct { 757719f82d3SEliot Blennerhassett /* bitmap of grouped OutStreams */ 758719f82d3SEliot Blennerhassett u32 outstream_group_map; 759719f82d3SEliot Blennerhassett /* bitmap of grouped InStreams */ 760719f82d3SEliot Blennerhassett u32 instream_group_map; 761719f82d3SEliot Blennerhassett } group_info; 762719f82d3SEliot Blennerhassett struct { 763719f82d3SEliot Blennerhassett /* pointer to the buffer */ 764719f82d3SEliot Blennerhassett u8 *p_buffer; 765719f82d3SEliot Blennerhassett /* pointer to the hostbuffer status */ 766719f82d3SEliot Blennerhassett struct hpi_hostbuffer_status *p_status; 767719f82d3SEliot Blennerhassett } hostbuffer_info; 768719f82d3SEliot Blennerhassett } u; 769719f82d3SEliot Blennerhassett }; 770719f82d3SEliot Blennerhassett 771719f82d3SEliot Blennerhassett struct hpi_mixer_msg { 772719f82d3SEliot Blennerhassett u16 control_index; 773719f82d3SEliot Blennerhassett u16 control_type; /* = HPI_CONTROL_METER _VOLUME etc */ 7743285ea10SEliot Blennerhassett u16 padding1; /* Maintain alignment of subsequent fields */ 775719f82d3SEliot Blennerhassett u16 node_type1; /* = HPI_SOURCENODE_LINEIN etc */ 776719f82d3SEliot Blennerhassett u16 node_index1; /* = 0..N */ 777719f82d3SEliot Blennerhassett u16 node_type2; 778719f82d3SEliot Blennerhassett u16 node_index2; 779719f82d3SEliot Blennerhassett u16 padding2; /* round to 4 bytes */ 780719f82d3SEliot Blennerhassett }; 781719f82d3SEliot Blennerhassett 782719f82d3SEliot Blennerhassett struct hpi_mixer_res { 783719f82d3SEliot Blennerhassett u16 src_node_type; /* = HPI_SOURCENODE_LINEIN etc */ 784719f82d3SEliot Blennerhassett u16 src_node_index; /* = 0..N */ 785719f82d3SEliot Blennerhassett u16 dst_node_type; 786719f82d3SEliot Blennerhassett u16 dst_node_index; 787719f82d3SEliot Blennerhassett /* Also controlType for MixerGetControlByIndex */ 788719f82d3SEliot Blennerhassett u16 control_index; 789719f82d3SEliot Blennerhassett /* may indicate which DSP the control is located on */ 790719f82d3SEliot Blennerhassett u16 dsp_index; 791719f82d3SEliot Blennerhassett }; 792719f82d3SEliot Blennerhassett 793719f82d3SEliot Blennerhassett union hpi_mixerx_msg { 794719f82d3SEliot Blennerhassett struct { 795719f82d3SEliot Blennerhassett u16 starting_index; 796719f82d3SEliot Blennerhassett u16 flags; 797719f82d3SEliot Blennerhassett u32 length_in_bytes; /* length in bytes of p_data */ 798719f82d3SEliot Blennerhassett u32 p_data; /* pointer to a data array */ 799719f82d3SEliot Blennerhassett } gcabi; 800719f82d3SEliot Blennerhassett struct { 801719f82d3SEliot Blennerhassett u16 command; 802719f82d3SEliot Blennerhassett u16 index; 803719f82d3SEliot Blennerhassett } store; /* for HPI_MIXER_STORE message */ 804719f82d3SEliot Blennerhassett }; 805719f82d3SEliot Blennerhassett 806719f82d3SEliot Blennerhassett union hpi_mixerx_res { 807719f82d3SEliot Blennerhassett struct { 808719f82d3SEliot Blennerhassett u32 bytes_returned; /* size of items returned */ 809719f82d3SEliot Blennerhassett u32 p_data; /* pointer to data array */ 810719f82d3SEliot Blennerhassett u16 more_to_do; /* indicates if there is more to do */ 811719f82d3SEliot Blennerhassett } gcabi; 812bd33c1caSEliot Blennerhassett struct { 813bd33c1caSEliot Blennerhassett u32 total_controls; /* count of controls in the mixer */ 814bd33c1caSEliot Blennerhassett u32 cache_controls; /* count of controls in the cac */ 815bd33c1caSEliot Blennerhassett u32 cache_bytes; /* size of cache */ 816bd33c1caSEliot Blennerhassett } cache_info; 817719f82d3SEliot Blennerhassett }; 818719f82d3SEliot Blennerhassett 819719f82d3SEliot Blennerhassett struct hpi_control_msg { 820719f82d3SEliot Blennerhassett u16 attribute; /* control attribute or property */ 821719f82d3SEliot Blennerhassett u16 saved_index; 822719f82d3SEliot Blennerhassett u32 param1; /* generic parameter 1 */ 823719f82d3SEliot Blennerhassett u32 param2; /* generic parameter 2 */ 824719f82d3SEliot Blennerhassett short an_log_value[HPI_MAX_CHANNELS]; 825719f82d3SEliot Blennerhassett }; 826719f82d3SEliot Blennerhassett 827719f82d3SEliot Blennerhassett struct hpi_control_union_msg { 828719f82d3SEliot Blennerhassett u16 attribute; /* control attribute or property */ 829719f82d3SEliot Blennerhassett u16 saved_index; /* only used in ctrl save/restore */ 830719f82d3SEliot Blennerhassett union { 831719f82d3SEliot Blennerhassett struct { 832719f82d3SEliot Blennerhassett u32 param1; /* generic parameter 1 */ 833719f82d3SEliot Blennerhassett u32 param2; /* generic parameter 2 */ 834719f82d3SEliot Blennerhassett short an_log_value[HPI_MAX_CHANNELS]; 835719f82d3SEliot Blennerhassett } old; 836719f82d3SEliot Blennerhassett union { 837719f82d3SEliot Blennerhassett u32 frequency; 838719f82d3SEliot Blennerhassett u32 gain; 839719f82d3SEliot Blennerhassett u32 band; 840719f82d3SEliot Blennerhassett u32 deemphasis; 841719f82d3SEliot Blennerhassett u32 program; 842719f82d3SEliot Blennerhassett struct { 843719f82d3SEliot Blennerhassett u32 mode; 844719f82d3SEliot Blennerhassett u32 value; 845719f82d3SEliot Blennerhassett } mode; 8465a498ef1SEliot Blennerhassett u32 blend; 847719f82d3SEliot Blennerhassett } tuner; 848719f82d3SEliot Blennerhassett } u; 849719f82d3SEliot Blennerhassett }; 850719f82d3SEliot Blennerhassett 851719f82d3SEliot Blennerhassett struct hpi_control_res { 852719f82d3SEliot Blennerhassett /* Could make union. dwParam, anLogValue never used in same response */ 853719f82d3SEliot Blennerhassett u32 param1; 854719f82d3SEliot Blennerhassett u32 param2; 855719f82d3SEliot Blennerhassett short an_log_value[HPI_MAX_CHANNELS]; 856719f82d3SEliot Blennerhassett }; 857719f82d3SEliot Blennerhassett 858719f82d3SEliot Blennerhassett union hpi_control_union_res { 859719f82d3SEliot Blennerhassett struct { 860719f82d3SEliot Blennerhassett u32 param1; 861719f82d3SEliot Blennerhassett u32 param2; 862719f82d3SEliot Blennerhassett short an_log_value[HPI_MAX_CHANNELS]; 863719f82d3SEliot Blennerhassett } old; 864719f82d3SEliot Blennerhassett union { 865719f82d3SEliot Blennerhassett u32 band; 866719f82d3SEliot Blennerhassett u32 frequency; 867719f82d3SEliot Blennerhassett u32 gain; 868719f82d3SEliot Blennerhassett u32 deemphasis; 869719f82d3SEliot Blennerhassett struct { 870719f82d3SEliot Blennerhassett u32 data[2]; 871719f82d3SEliot Blennerhassett u32 bLER; 872719f82d3SEliot Blennerhassett } rds; 8733285ea10SEliot Blennerhassett short s_level; 8743285ea10SEliot Blennerhassett struct { 8753285ea10SEliot Blennerhassett u16 value; 8763285ea10SEliot Blennerhassett u16 mask; 8773285ea10SEliot Blennerhassett } status; 878719f82d3SEliot Blennerhassett } tuner; 879719f82d3SEliot Blennerhassett struct { 880719f82d3SEliot Blennerhassett char sz_data[8]; 881719f82d3SEliot Blennerhassett u32 remaining_chars; 882719f82d3SEliot Blennerhassett } chars8; 883719f82d3SEliot Blennerhassett char c_data12[12]; 884719f82d3SEliot Blennerhassett union { 88558fbf77fSEliot Blennerhassett struct { 886719f82d3SEliot Blennerhassett u32 status; 887719f82d3SEliot Blennerhassett u32 readable_size; 888719f82d3SEliot Blennerhassett u32 writeable_size; 88958fbf77fSEliot Blennerhassett } status; 89058fbf77fSEliot Blennerhassett } cobranet; 891719f82d3SEliot Blennerhassett }; 892719f82d3SEliot Blennerhassett 893719f82d3SEliot Blennerhassett struct hpi_nvmemory_msg { 894719f82d3SEliot Blennerhassett u16 address; 895719f82d3SEliot Blennerhassett u16 data; 896719f82d3SEliot Blennerhassett }; 897719f82d3SEliot Blennerhassett 898719f82d3SEliot Blennerhassett struct hpi_nvmemory_res { 899719f82d3SEliot Blennerhassett u16 size_in_bytes; 900719f82d3SEliot Blennerhassett u16 data; 901719f82d3SEliot Blennerhassett }; 902719f82d3SEliot Blennerhassett 903719f82d3SEliot Blennerhassett struct hpi_gpio_msg { 904719f82d3SEliot Blennerhassett u16 bit_index; 905719f82d3SEliot Blennerhassett u16 bit_data; 906719f82d3SEliot Blennerhassett }; 907719f82d3SEliot Blennerhassett 908719f82d3SEliot Blennerhassett struct hpi_gpio_res { 909719f82d3SEliot Blennerhassett u16 number_input_bits; 910719f82d3SEliot Blennerhassett u16 number_output_bits; 911719f82d3SEliot Blennerhassett u16 bit_data[4]; 912719f82d3SEliot Blennerhassett }; 913719f82d3SEliot Blennerhassett 914719f82d3SEliot Blennerhassett struct hpi_async_msg { 915719f82d3SEliot Blennerhassett u32 events; 916719f82d3SEliot Blennerhassett u16 maximum_events; 917719f82d3SEliot Blennerhassett u16 padding; 918719f82d3SEliot Blennerhassett }; 919719f82d3SEliot Blennerhassett 920719f82d3SEliot Blennerhassett struct hpi_async_res { 921719f82d3SEliot Blennerhassett union { 922719f82d3SEliot Blennerhassett struct { 923719f82d3SEliot Blennerhassett u16 count; 924719f82d3SEliot Blennerhassett } count; 925719f82d3SEliot Blennerhassett struct { 926719f82d3SEliot Blennerhassett u32 events; 927719f82d3SEliot Blennerhassett u16 number_returned; 928719f82d3SEliot Blennerhassett u16 padding; 929719f82d3SEliot Blennerhassett } get; 930719f82d3SEliot Blennerhassett struct hpi_async_event event; 931719f82d3SEliot Blennerhassett } u; 932719f82d3SEliot Blennerhassett }; 933719f82d3SEliot Blennerhassett 934719f82d3SEliot Blennerhassett struct hpi_watchdog_msg { 935719f82d3SEliot Blennerhassett u32 time_ms; 936719f82d3SEliot Blennerhassett }; 937719f82d3SEliot Blennerhassett 938719f82d3SEliot Blennerhassett struct hpi_watchdog_res { 939719f82d3SEliot Blennerhassett u32 time_ms; 940719f82d3SEliot Blennerhassett }; 941719f82d3SEliot Blennerhassett 942719f82d3SEliot Blennerhassett struct hpi_clock_msg { 943719f82d3SEliot Blennerhassett u16 hours; 944719f82d3SEliot Blennerhassett u16 minutes; 945719f82d3SEliot Blennerhassett u16 seconds; 946719f82d3SEliot Blennerhassett u16 milli_seconds; 947719f82d3SEliot Blennerhassett }; 948719f82d3SEliot Blennerhassett 949719f82d3SEliot Blennerhassett struct hpi_clock_res { 950719f82d3SEliot Blennerhassett u16 size_in_bytes; 951719f82d3SEliot Blennerhassett u16 hours; 952719f82d3SEliot Blennerhassett u16 minutes; 953719f82d3SEliot Blennerhassett u16 seconds; 954719f82d3SEliot Blennerhassett u16 milli_seconds; 955719f82d3SEliot Blennerhassett u16 padding; 956719f82d3SEliot Blennerhassett }; 957719f82d3SEliot Blennerhassett 958719f82d3SEliot Blennerhassett struct hpi_profile_msg { 959719f82d3SEliot Blennerhassett u16 bin_index; 960719f82d3SEliot Blennerhassett u16 padding; 961719f82d3SEliot Blennerhassett }; 962719f82d3SEliot Blennerhassett 963719f82d3SEliot Blennerhassett struct hpi_profile_res_open { 964719f82d3SEliot Blennerhassett u16 max_profiles; 965719f82d3SEliot Blennerhassett }; 966719f82d3SEliot Blennerhassett 967719f82d3SEliot Blennerhassett struct hpi_profile_res_time { 9683285ea10SEliot Blennerhassett u32 total_tick_count; 969719f82d3SEliot Blennerhassett u32 call_count; 9703285ea10SEliot Blennerhassett u32 max_tick_count; 9713285ea10SEliot Blennerhassett u32 ticks_per_millisecond; 9723285ea10SEliot Blennerhassett u16 profile_interval; 973719f82d3SEliot Blennerhassett }; 974719f82d3SEliot Blennerhassett 975719f82d3SEliot Blennerhassett struct hpi_profile_res_name { 976719f82d3SEliot Blennerhassett u8 sz_name[32]; 977719f82d3SEliot Blennerhassett }; 978719f82d3SEliot Blennerhassett 979719f82d3SEliot Blennerhassett struct hpi_profile_res { 980719f82d3SEliot Blennerhassett union { 981719f82d3SEliot Blennerhassett struct hpi_profile_res_open o; 982719f82d3SEliot Blennerhassett struct hpi_profile_res_time t; 983719f82d3SEliot Blennerhassett struct hpi_profile_res_name n; 984719f82d3SEliot Blennerhassett } u; 985719f82d3SEliot Blennerhassett }; 986719f82d3SEliot Blennerhassett 987719f82d3SEliot Blennerhassett struct hpi_message_header { 988719f82d3SEliot Blennerhassett u16 size; /* total size in bytes */ 989719f82d3SEliot Blennerhassett u8 type; /* HPI_TYPE_MESSAGE */ 990719f82d3SEliot Blennerhassett u8 version; /* message version */ 991719f82d3SEliot Blennerhassett u16 object; /* HPI_OBJ_* */ 992719f82d3SEliot Blennerhassett u16 function; /* HPI_SUBSYS_xxx, HPI_ADAPTER_xxx */ 993719f82d3SEliot Blennerhassett u16 adapter_index; /* the adapter index */ 994719f82d3SEliot Blennerhassett u16 obj_index; /* */ 995719f82d3SEliot Blennerhassett }; 996719f82d3SEliot Blennerhassett 997719f82d3SEliot Blennerhassett struct hpi_message { 998719f82d3SEliot Blennerhassett /* following fields must match HPI_MESSAGE_HEADER */ 999719f82d3SEliot Blennerhassett u16 size; /* total size in bytes */ 1000719f82d3SEliot Blennerhassett u8 type; /* HPI_TYPE_MESSAGE */ 1001719f82d3SEliot Blennerhassett u8 version; /* message version */ 1002719f82d3SEliot Blennerhassett u16 object; /* HPI_OBJ_* */ 1003719f82d3SEliot Blennerhassett u16 function; /* HPI_SUBSYS_xxx, HPI_ADAPTER_xxx */ 1004719f82d3SEliot Blennerhassett u16 adapter_index; /* the adapter index */ 1005719f82d3SEliot Blennerhassett u16 obj_index; /* */ 1006719f82d3SEliot Blennerhassett union { 1007719f82d3SEliot Blennerhassett struct hpi_subsys_msg s; 1008719f82d3SEliot Blennerhassett union hpi_adapterx_msg ax; 1009719f82d3SEliot Blennerhassett struct hpi_stream_msg d; 1010719f82d3SEliot Blennerhassett struct hpi_mixer_msg m; 1011719f82d3SEliot Blennerhassett union hpi_mixerx_msg mx; /* extended mixer; */ 1012719f82d3SEliot Blennerhassett struct hpi_control_msg c; /* mixer control; */ 1013719f82d3SEliot Blennerhassett /* identical to struct hpi_control_msg, 1014719f82d3SEliot Blennerhassett but field naming is improved */ 1015719f82d3SEliot Blennerhassett struct hpi_control_union_msg cu; 1016719f82d3SEliot Blennerhassett struct hpi_nvmemory_msg n; 1017719f82d3SEliot Blennerhassett struct hpi_gpio_msg l; /* digital i/o */ 1018719f82d3SEliot Blennerhassett struct hpi_watchdog_msg w; 1019719f82d3SEliot Blennerhassett struct hpi_clock_msg t; /* dsp time */ 1020719f82d3SEliot Blennerhassett struct hpi_profile_msg p; 1021719f82d3SEliot Blennerhassett struct hpi_async_msg as; 1022719f82d3SEliot Blennerhassett char fixed_size[32]; 1023719f82d3SEliot Blennerhassett } u; 1024719f82d3SEliot Blennerhassett }; 1025719f82d3SEliot Blennerhassett 1026719f82d3SEliot Blennerhassett #define HPI_MESSAGE_SIZE_BY_OBJECT { \ 10273285ea10SEliot Blennerhassett sizeof(struct hpi_message_header) , /* Default, no object type 0 */ \ 1028719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_subsys_msg),\ 1029719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(union hpi_adapterx_msg),\ 1030719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_stream_msg),\ 1031719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_stream_msg),\ 1032719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_mixer_msg),\ 1033719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) , /* no node message */ \ 1034719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_control_msg),\ 1035719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_nvmemory_msg),\ 1036719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_gpio_msg),\ 1037719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_watchdog_msg),\ 1038719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_clock_msg),\ 1039719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_profile_msg),\ 104058fbf77fSEliot Blennerhassett sizeof(struct hpi_message_header), /* controlx obj removed */ \ 1041719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_async_msg) \ 1042719f82d3SEliot Blennerhassett } 1043719f82d3SEliot Blennerhassett 10441d595d2aSEliot Blennerhassett /* 10451d595d2aSEliot Blennerhassett Note that the wSpecificError error field should be inspected and potentially 10461d595d2aSEliot Blennerhassett reported whenever HPI_ERROR_DSP_COMMUNICATION or HPI_ERROR_DSP_BOOTLOAD is 10471d595d2aSEliot Blennerhassett returned in wError. 10481d595d2aSEliot Blennerhassett */ 1049719f82d3SEliot Blennerhassett struct hpi_response_header { 1050719f82d3SEliot Blennerhassett u16 size; 1051719f82d3SEliot Blennerhassett u8 type; /* HPI_TYPE_RESPONSE */ 1052719f82d3SEliot Blennerhassett u8 version; /* response version */ 1053719f82d3SEliot Blennerhassett u16 object; /* HPI_OBJ_* */ 1054719f82d3SEliot Blennerhassett u16 function; /* HPI_SUBSYS_xxx, HPI_ADAPTER_xxx */ 1055719f82d3SEliot Blennerhassett u16 error; /* HPI_ERROR_xxx */ 1056719f82d3SEliot Blennerhassett u16 specific_error; /* adapter specific error */ 1057719f82d3SEliot Blennerhassett }; 1058719f82d3SEliot Blennerhassett 1059719f82d3SEliot Blennerhassett struct hpi_response { 1060719f82d3SEliot Blennerhassett /* following fields must match HPI_RESPONSE_HEADER */ 1061719f82d3SEliot Blennerhassett u16 size; 1062719f82d3SEliot Blennerhassett u8 type; /* HPI_TYPE_RESPONSE */ 1063719f82d3SEliot Blennerhassett u8 version; /* response version */ 1064719f82d3SEliot Blennerhassett u16 object; /* HPI_OBJ_* */ 1065719f82d3SEliot Blennerhassett u16 function; /* HPI_SUBSYS_xxx, HPI_ADAPTER_xxx */ 1066719f82d3SEliot Blennerhassett u16 error; /* HPI_ERROR_xxx */ 1067719f82d3SEliot Blennerhassett u16 specific_error; /* adapter specific error */ 1068719f82d3SEliot Blennerhassett union { 1069719f82d3SEliot Blennerhassett struct hpi_subsys_res s; 1070719f82d3SEliot Blennerhassett union hpi_adapterx_res ax; 1071719f82d3SEliot Blennerhassett struct hpi_stream_res d; 1072719f82d3SEliot Blennerhassett struct hpi_mixer_res m; 1073719f82d3SEliot Blennerhassett union hpi_mixerx_res mx; /* extended mixer; */ 1074719f82d3SEliot Blennerhassett struct hpi_control_res c; /* mixer control; */ 1075719f82d3SEliot Blennerhassett /* identical to hpi_control_res, but field naming is improved */ 1076719f82d3SEliot Blennerhassett union hpi_control_union_res cu; 1077719f82d3SEliot Blennerhassett struct hpi_nvmemory_res n; 1078719f82d3SEliot Blennerhassett struct hpi_gpio_res l; /* digital i/o */ 1079719f82d3SEliot Blennerhassett struct hpi_watchdog_res w; 1080719f82d3SEliot Blennerhassett struct hpi_clock_res t; /* dsp time */ 1081719f82d3SEliot Blennerhassett struct hpi_profile_res p; 1082719f82d3SEliot Blennerhassett struct hpi_async_res as; 1083719f82d3SEliot Blennerhassett u8 bytes[52]; 1084719f82d3SEliot Blennerhassett } u; 1085719f82d3SEliot Blennerhassett }; 1086719f82d3SEliot Blennerhassett 1087719f82d3SEliot Blennerhassett #define HPI_RESPONSE_SIZE_BY_OBJECT { \ 10883285ea10SEliot Blennerhassett sizeof(struct hpi_response_header) ,/* Default, no object type 0 */ \ 1089719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_subsys_res),\ 1090719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(union hpi_adapterx_res),\ 1091719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_stream_res),\ 1092719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_stream_res),\ 1093719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_mixer_res),\ 1094719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) , /* no node response */ \ 1095719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_control_res),\ 1096719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_nvmemory_res),\ 1097719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_gpio_res),\ 1098719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_watchdog_res),\ 1099719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_clock_res),\ 1100719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_profile_res),\ 110158fbf77fSEliot Blennerhassett sizeof(struct hpi_response_header), /* controlx obj removed */ \ 1102719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_async_res) \ 1103719f82d3SEliot Blennerhassett } 1104719f82d3SEliot Blennerhassett 1105ba94455cSEliot Blennerhassett /*********************** version 1 message/response **************************/ 1106719f82d3SEliot Blennerhassett #define HPINET_ETHERNET_DATA_SIZE (1500) 1107719f82d3SEliot Blennerhassett #define HPINET_IP_HDR_SIZE (20) 1108719f82d3SEliot Blennerhassett #define HPINET_IP_DATA_SIZE (HPINET_ETHERNET_DATA_SIZE - HPINET_IP_HDR_SIZE) 1109719f82d3SEliot Blennerhassett #define HPINET_UDP_HDR_SIZE (8) 1110719f82d3SEliot Blennerhassett #define HPINET_UDP_DATA_SIZE (HPINET_IP_DATA_SIZE - HPINET_UDP_HDR_SIZE) 1111719f82d3SEliot Blennerhassett #define HPINET_ASI_HDR_SIZE (2) 1112719f82d3SEliot Blennerhassett #define HPINET_ASI_DATA_SIZE (HPINET_UDP_DATA_SIZE - HPINET_ASI_HDR_SIZE) 1113719f82d3SEliot Blennerhassett 1114719f82d3SEliot Blennerhassett #define HPI_MAX_PAYLOAD_SIZE (HPINET_ASI_DATA_SIZE - 2) 1115719f82d3SEliot Blennerhassett 1116719f82d3SEliot Blennerhassett /* New style message/response, but still V0 compatible */ 1117719f82d3SEliot Blennerhassett struct hpi_msg_adapter_get_info { 1118719f82d3SEliot Blennerhassett struct hpi_message_header h; 1119719f82d3SEliot Blennerhassett }; 1120719f82d3SEliot Blennerhassett 1121719f82d3SEliot Blennerhassett struct hpi_res_adapter_get_info { 1122719f82d3SEliot Blennerhassett struct hpi_response_header h; /*v0 */ 1123719f82d3SEliot Blennerhassett struct hpi_adapter_res p; 1124719f82d3SEliot Blennerhassett }; 1125719f82d3SEliot Blennerhassett 11263285ea10SEliot Blennerhassett struct hpi_res_adapter_debug_read { 11273285ea10SEliot Blennerhassett struct hpi_response_header h; 11283dad06acSEliot Blennerhassett u8 bytes[1024]; 11293285ea10SEliot Blennerhassett }; 11303285ea10SEliot Blennerhassett 113158fbf77fSEliot Blennerhassett struct hpi_msg_cobranet_hmi { 113258fbf77fSEliot Blennerhassett u16 attribute; 113358fbf77fSEliot Blennerhassett u16 padding; 113458fbf77fSEliot Blennerhassett u32 hmi_address; 113558fbf77fSEliot Blennerhassett u32 byte_count; 113658fbf77fSEliot Blennerhassett }; 113758fbf77fSEliot Blennerhassett 113858fbf77fSEliot Blennerhassett struct hpi_msg_cobranet_hmiwrite { 113958fbf77fSEliot Blennerhassett struct hpi_message_header h; 114058fbf77fSEliot Blennerhassett struct hpi_msg_cobranet_hmi p; 114158fbf77fSEliot Blennerhassett u8 bytes[256]; 114258fbf77fSEliot Blennerhassett }; 114358fbf77fSEliot Blennerhassett 114458fbf77fSEliot Blennerhassett struct hpi_msg_cobranet_hmiread { 114558fbf77fSEliot Blennerhassett struct hpi_message_header h; 114658fbf77fSEliot Blennerhassett struct hpi_msg_cobranet_hmi p; 114758fbf77fSEliot Blennerhassett }; 114858fbf77fSEliot Blennerhassett 114958fbf77fSEliot Blennerhassett struct hpi_res_cobranet_hmiread { 115058fbf77fSEliot Blennerhassett struct hpi_response_header h; 115158fbf77fSEliot Blennerhassett u32 byte_count; 115258fbf77fSEliot Blennerhassett u8 bytes[256]; 115358fbf77fSEliot Blennerhassett }; 115458fbf77fSEliot Blennerhassett 1155719f82d3SEliot Blennerhassett #if 1 1156719f82d3SEliot Blennerhassett #define hpi_message_header_v1 hpi_message_header 1157719f82d3SEliot Blennerhassett #define hpi_response_header_v1 hpi_response_header 1158719f82d3SEliot Blennerhassett #else 1159719f82d3SEliot Blennerhassett /* V1 headers in Addition to v0 headers */ 1160719f82d3SEliot Blennerhassett struct hpi_message_header_v1 { 1161719f82d3SEliot Blennerhassett struct hpi_message_header h0; 1162719f82d3SEliot Blennerhassett /* struct { 1163719f82d3SEliot Blennerhassett } h1; */ 1164719f82d3SEliot Blennerhassett }; 1165719f82d3SEliot Blennerhassett 1166719f82d3SEliot Blennerhassett struct hpi_response_header_v1 { 1167719f82d3SEliot Blennerhassett struct hpi_response_header h0; 1168719f82d3SEliot Blennerhassett struct { 1169719f82d3SEliot Blennerhassett u16 adapter_index; /* the adapter index */ 1170719f82d3SEliot Blennerhassett u16 obj_index; /* object index */ 1171719f82d3SEliot Blennerhassett } h1; 1172719f82d3SEliot Blennerhassett }; 1173719f82d3SEliot Blennerhassett #endif 1174719f82d3SEliot Blennerhassett 1175719f82d3SEliot Blennerhassett struct hpi_msg_payload_v0 { 1176719f82d3SEliot Blennerhassett struct hpi_message_header h; 1177719f82d3SEliot Blennerhassett union { 1178719f82d3SEliot Blennerhassett struct hpi_subsys_msg s; 1179719f82d3SEliot Blennerhassett union hpi_adapterx_msg ax; 1180719f82d3SEliot Blennerhassett struct hpi_stream_msg d; 1181719f82d3SEliot Blennerhassett struct hpi_mixer_msg m; 1182719f82d3SEliot Blennerhassett union hpi_mixerx_msg mx; 1183719f82d3SEliot Blennerhassett struct hpi_control_msg c; 1184719f82d3SEliot Blennerhassett struct hpi_control_union_msg cu; 1185719f82d3SEliot Blennerhassett struct hpi_nvmemory_msg n; 1186719f82d3SEliot Blennerhassett struct hpi_gpio_msg l; 1187719f82d3SEliot Blennerhassett struct hpi_watchdog_msg w; 1188719f82d3SEliot Blennerhassett struct hpi_clock_msg t; 1189719f82d3SEliot Blennerhassett struct hpi_profile_msg p; 1190719f82d3SEliot Blennerhassett struct hpi_async_msg as; 1191719f82d3SEliot Blennerhassett } u; 1192719f82d3SEliot Blennerhassett }; 1193719f82d3SEliot Blennerhassett 1194719f82d3SEliot Blennerhassett struct hpi_res_payload_v0 { 1195719f82d3SEliot Blennerhassett struct hpi_response_header h; 1196719f82d3SEliot Blennerhassett union { 1197719f82d3SEliot Blennerhassett struct hpi_subsys_res s; 1198719f82d3SEliot Blennerhassett union hpi_adapterx_res ax; 1199719f82d3SEliot Blennerhassett struct hpi_stream_res d; 1200719f82d3SEliot Blennerhassett struct hpi_mixer_res m; 1201719f82d3SEliot Blennerhassett union hpi_mixerx_res mx; 1202719f82d3SEliot Blennerhassett struct hpi_control_res c; 1203719f82d3SEliot Blennerhassett union hpi_control_union_res cu; 1204719f82d3SEliot Blennerhassett struct hpi_nvmemory_res n; 1205719f82d3SEliot Blennerhassett struct hpi_gpio_res l; 1206719f82d3SEliot Blennerhassett struct hpi_watchdog_res w; 1207719f82d3SEliot Blennerhassett struct hpi_clock_res t; 1208719f82d3SEliot Blennerhassett struct hpi_profile_res p; 1209719f82d3SEliot Blennerhassett struct hpi_async_res as; 1210719f82d3SEliot Blennerhassett } u; 1211719f82d3SEliot Blennerhassett }; 1212719f82d3SEliot Blennerhassett 1213719f82d3SEliot Blennerhassett union hpi_message_buffer_v1 { 1214719f82d3SEliot Blennerhassett struct hpi_message m0; /* version 0 */ 1215719f82d3SEliot Blennerhassett struct hpi_message_header_v1 h; 12163285ea10SEliot Blennerhassett u8 buf[HPI_MAX_PAYLOAD_SIZE]; 1217719f82d3SEliot Blennerhassett }; 1218719f82d3SEliot Blennerhassett 1219719f82d3SEliot Blennerhassett union hpi_response_buffer_v1 { 1220719f82d3SEliot Blennerhassett struct hpi_response r0; /* version 0 */ 1221719f82d3SEliot Blennerhassett struct hpi_response_header_v1 h; 12223285ea10SEliot Blennerhassett u8 buf[HPI_MAX_PAYLOAD_SIZE]; 1223719f82d3SEliot Blennerhassett }; 1224719f82d3SEliot Blennerhassett 1225719f82d3SEliot Blennerhassett compile_time_assert((sizeof(union hpi_message_buffer_v1) <= 1226719f82d3SEliot Blennerhassett HPI_MAX_PAYLOAD_SIZE), message_buffer_ok); 1227719f82d3SEliot Blennerhassett compile_time_assert((sizeof(union hpi_response_buffer_v1) <= 1228719f82d3SEliot Blennerhassett HPI_MAX_PAYLOAD_SIZE), response_buffer_ok); 1229719f82d3SEliot Blennerhassett 1230719f82d3SEliot Blennerhassett /*////////////////////////////////////////////////////////////////////////// */ 1231719f82d3SEliot Blennerhassett /* declarations for compact control calls */ 1232719f82d3SEliot Blennerhassett struct hpi_control_defn { 1233719f82d3SEliot Blennerhassett u8 type; 1234719f82d3SEliot Blennerhassett u8 channels; 1235719f82d3SEliot Blennerhassett u8 src_node_type; 1236719f82d3SEliot Blennerhassett u8 src_node_index; 1237719f82d3SEliot Blennerhassett u8 dest_node_type; 1238719f82d3SEliot Blennerhassett u8 dest_node_index; 1239719f82d3SEliot Blennerhassett }; 1240719f82d3SEliot Blennerhassett 1241719f82d3SEliot Blennerhassett /*////////////////////////////////////////////////////////////////////////// */ 1242719f82d3SEliot Blennerhassett /* declarations for control caching (internal to HPI<->DSP interaction) */ 1243719f82d3SEliot Blennerhassett 12443285ea10SEliot Blennerhassett /** indicates a cached u16 value is invalid. */ 12453285ea10SEliot Blennerhassett #define HPI_CACHE_INVALID_UINT16 0xFFFF 12463285ea10SEliot Blennerhassett /** indicates a cached short value is invalid. */ 12473285ea10SEliot Blennerhassett #define HPI_CACHE_INVALID_SHORT -32768 12483285ea10SEliot Blennerhassett 1249719f82d3SEliot Blennerhassett /** A compact representation of (part of) a controls state. 1250719f82d3SEliot Blennerhassett Used for efficient transfer of the control state 1251719f82d3SEliot Blennerhassett between DSP and host or across a network 1252719f82d3SEliot Blennerhassett */ 1253719f82d3SEliot Blennerhassett struct hpi_control_cache_info { 1254719f82d3SEliot Blennerhassett /** one of HPI_CONTROL_* */ 1255719f82d3SEliot Blennerhassett u8 control_type; 1256719f82d3SEliot Blennerhassett /** The total size of cached information in 32-bit words. */ 1257719f82d3SEliot Blennerhassett u8 size_in32bit_words; 1258719f82d3SEliot Blennerhassett /** The original index of the control on the DSP */ 1259719f82d3SEliot Blennerhassett u16 control_index; 1260719f82d3SEliot Blennerhassett }; 1261719f82d3SEliot Blennerhassett 12623285ea10SEliot Blennerhassett struct hpi_control_cache_vol { 1263719f82d3SEliot Blennerhassett struct hpi_control_cache_info i; 1264108ccb3fSEliot Blennerhassett short an_log[2]; 1265fc3a3990SEliot Blennerhassett unsigned short flags; 1266fc3a3990SEliot Blennerhassett char padding[2]; 12673285ea10SEliot Blennerhassett }; 12683285ea10SEliot Blennerhassett 12693285ea10SEliot Blennerhassett struct hpi_control_cache_meter { 12703285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1271108ccb3fSEliot Blennerhassett short an_log_peak[2]; 1272108ccb3fSEliot Blennerhassett short an_logRMS[2]; 12733285ea10SEliot Blennerhassett }; 12743285ea10SEliot Blennerhassett 12753285ea10SEliot Blennerhassett struct hpi_control_cache_channelmode { 12763285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1277719f82d3SEliot Blennerhassett u16 mode; 12783285ea10SEliot Blennerhassett char temp_padding[6]; 12793285ea10SEliot Blennerhassett }; 12803285ea10SEliot Blennerhassett 12813285ea10SEliot Blennerhassett struct hpi_control_cache_mux { 12823285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1283719f82d3SEliot Blennerhassett u16 source_node_type; 1284719f82d3SEliot Blennerhassett u16 source_node_index; 12853285ea10SEliot Blennerhassett char temp_padding[4]; 12863285ea10SEliot Blennerhassett }; 12873285ea10SEliot Blennerhassett 12883285ea10SEliot Blennerhassett struct hpi_control_cache_level { 12893285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1290108ccb3fSEliot Blennerhassett short an_log[2]; 12913285ea10SEliot Blennerhassett char temp_padding[4]; 12923285ea10SEliot Blennerhassett }; 12933285ea10SEliot Blennerhassett 12943285ea10SEliot Blennerhassett struct hpi_control_cache_tuner { 12953285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1296719f82d3SEliot Blennerhassett u32 freq_ink_hz; 1297719f82d3SEliot Blennerhassett u16 band; 12983285ea10SEliot Blennerhassett short s_level_avg; 12993285ea10SEliot Blennerhassett }; 13003285ea10SEliot Blennerhassett 13013285ea10SEliot Blennerhassett struct hpi_control_cache_aes3rx { 13023285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1303719f82d3SEliot Blennerhassett u32 error_status; 1304719f82d3SEliot Blennerhassett u32 format; 13053285ea10SEliot Blennerhassett }; 13063285ea10SEliot Blennerhassett 13073285ea10SEliot Blennerhassett struct hpi_control_cache_aes3tx { 13083285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 13093285ea10SEliot Blennerhassett u32 format; 13103285ea10SEliot Blennerhassett char temp_padding[4]; 13113285ea10SEliot Blennerhassett }; 13123285ea10SEliot Blennerhassett 13133285ea10SEliot Blennerhassett struct hpi_control_cache_tonedetector { 13143285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1315719f82d3SEliot Blennerhassett u16 state; 13163285ea10SEliot Blennerhassett char temp_padding[6]; 13173285ea10SEliot Blennerhassett }; 13183285ea10SEliot Blennerhassett 13193285ea10SEliot Blennerhassett struct hpi_control_cache_silencedetector { 13203285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1321719f82d3SEliot Blennerhassett u32 state; 13223285ea10SEliot Blennerhassett char temp_padding[4]; 13233285ea10SEliot Blennerhassett }; 13243285ea10SEliot Blennerhassett 13253285ea10SEliot Blennerhassett struct hpi_control_cache_sampleclock { 13263285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1327719f82d3SEliot Blennerhassett u16 source; 1328719f82d3SEliot Blennerhassett u16 source_index; 1329719f82d3SEliot Blennerhassett u32 sample_rate; 13303285ea10SEliot Blennerhassett }; 13313285ea10SEliot Blennerhassett 13323285ea10SEliot Blennerhassett struct hpi_control_cache_microphone { 13333285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 13343285ea10SEliot Blennerhassett u16 phantom_state; 13353285ea10SEliot Blennerhassett char temp_padding[6]; 13363285ea10SEliot Blennerhassett }; 13373285ea10SEliot Blennerhassett 13383285ea10SEliot Blennerhassett struct hpi_control_cache_single { 13393285ea10SEliot Blennerhassett union { 13403285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 13413285ea10SEliot Blennerhassett struct hpi_control_cache_vol vol; 13423285ea10SEliot Blennerhassett struct hpi_control_cache_meter meter; 13433285ea10SEliot Blennerhassett struct hpi_control_cache_channelmode mode; 13443285ea10SEliot Blennerhassett struct hpi_control_cache_mux mux; 13453285ea10SEliot Blennerhassett struct hpi_control_cache_level level; 13463285ea10SEliot Blennerhassett struct hpi_control_cache_tuner tuner; 13473285ea10SEliot Blennerhassett struct hpi_control_cache_aes3rx aes3rx; 13483285ea10SEliot Blennerhassett struct hpi_control_cache_aes3tx aes3tx; 13493285ea10SEliot Blennerhassett struct hpi_control_cache_tonedetector tone; 13503285ea10SEliot Blennerhassett struct hpi_control_cache_silencedetector silence; 13513285ea10SEliot Blennerhassett struct hpi_control_cache_sampleclock clk; 13523285ea10SEliot Blennerhassett struct hpi_control_cache_microphone microphone; 1353719f82d3SEliot Blennerhassett } u; 1354719f82d3SEliot Blennerhassett }; 1355719f82d3SEliot Blennerhassett 1356719f82d3SEliot Blennerhassett struct hpi_control_cache_pad { 1357719f82d3SEliot Blennerhassett struct hpi_control_cache_info i; 1358719f82d3SEliot Blennerhassett u32 field_valid_flags; 135917d4de4cSEliot Blennerhassett u8 c_channel[40]; 136017d4de4cSEliot Blennerhassett u8 c_artist[100]; 136117d4de4cSEliot Blennerhassett u8 c_title[100]; 1362719f82d3SEliot Blennerhassett u8 c_comment[200]; 1363719f82d3SEliot Blennerhassett u32 pTY; 1364719f82d3SEliot Blennerhassett u32 pI; 1365719f82d3SEliot Blennerhassett u32 traffic_supported; 1366719f82d3SEliot Blennerhassett u32 traffic_anouncement; 1367719f82d3SEliot Blennerhassett }; 1368719f82d3SEliot Blennerhassett 1369ba94455cSEliot Blennerhassett /* 2^N sized FIFO buffer (internal to HPI<->DSP interaction) */ 1370719f82d3SEliot Blennerhassett struct hpi_fifo_buffer { 1371719f82d3SEliot Blennerhassett u32 size; 13728e0874eaSEliot Blennerhassett u32 dsp_index; 1373719f82d3SEliot Blennerhassett u32 host_index; 1374719f82d3SEliot Blennerhassett }; 1375719f82d3SEliot Blennerhassett 1376719f82d3SEliot Blennerhassett #ifndef DISABLE_PRAGMA_PACK1 1377719f82d3SEliot Blennerhassett #pragma pack(pop) 1378719f82d3SEliot Blennerhassett #endif 1379719f82d3SEliot Blennerhassett 1380719f82d3SEliot Blennerhassett /* skip host side function declarations for DSP 1381719f82d3SEliot Blennerhassett compile and documentation extraction */ 1382719f82d3SEliot Blennerhassett 1383719f82d3SEliot Blennerhassett char hpi_handle_object(const u32 handle); 1384719f82d3SEliot Blennerhassett 1385719f82d3SEliot Blennerhassett void hpi_handle_to_indexes(const u32 handle, u16 *pw_adapter_index, 1386719f82d3SEliot Blennerhassett u16 *pw_object_index); 1387719f82d3SEliot Blennerhassett 1388719f82d3SEliot Blennerhassett u32 hpi_indexes_to_handle(const char c_object, const u16 adapter_index, 1389719f82d3SEliot Blennerhassett const u16 object_index); 1390719f82d3SEliot Blennerhassett 1391719f82d3SEliot Blennerhassett /*////////////////////////////////////////////////////////////////////////// */ 1392719f82d3SEliot Blennerhassett 1393719f82d3SEliot Blennerhassett /* main HPI entry point */ 1394ba94455cSEliot Blennerhassett void hpi_send_recv(struct hpi_message *phm, struct hpi_response *phr); 1395719f82d3SEliot Blennerhassett 1396719f82d3SEliot Blennerhassett /* used in PnP OS/driver */ 1397ba94455cSEliot Blennerhassett u16 hpi_outstream_host_buffer_get_info(u32 h_outstream, u8 **pp_buffer, 1398719f82d3SEliot Blennerhassett struct hpi_hostbuffer_status **pp_status); 1399719f82d3SEliot Blennerhassett 1400ba94455cSEliot Blennerhassett u16 hpi_instream_host_buffer_get_info(u32 h_instream, u8 **pp_buffer, 1401719f82d3SEliot Blennerhassett struct hpi_hostbuffer_status **pp_status); 1402719f82d3SEliot Blennerhassett 1403719f82d3SEliot Blennerhassett /* 1404719f82d3SEliot Blennerhassett The following 3 functions were last declared in header files for 1405719f82d3SEliot Blennerhassett driver 3.10. HPI_ControlQuery() used to be the recommended way 1406719f82d3SEliot Blennerhassett of getting a volume range. Declared here for binary asihpi32.dll 1407719f82d3SEliot Blennerhassett compatibility. 1408719f82d3SEliot Blennerhassett */ 1409719f82d3SEliot Blennerhassett 1410719f82d3SEliot Blennerhassett void hpi_format_to_msg(struct hpi_msg_format *pMF, 1411719f82d3SEliot Blennerhassett const struct hpi_format *pF); 1412719f82d3SEliot Blennerhassett void hpi_stream_response_to_legacy(struct hpi_stream_res *pSR); 1413719f82d3SEliot Blennerhassett 1414719f82d3SEliot Blennerhassett /*////////////////////////////////////////////////////////////////////////// */ 1415719f82d3SEliot Blennerhassett /* declarations for individual HPI entry points */ 1416719f82d3SEliot Blennerhassett hpi_handler_func HPI_6000; 1417719f82d3SEliot Blennerhassett hpi_handler_func HPI_6205; 1418719f82d3SEliot Blennerhassett 1419719f82d3SEliot Blennerhassett #endif /* _HPI_INTERNAL_H_ */ 1420