1719f82d3SEliot Blennerhassett /****************************************************************************** 2719f82d3SEliot Blennerhassett 3719f82d3SEliot Blennerhassett AudioScience HPI driver 492fd918cSEliot Blennerhassett Copyright (C) 1997-2012 AudioScience Inc. <support@audioscience.com> 5719f82d3SEliot Blennerhassett 6719f82d3SEliot Blennerhassett This program is free software; you can redistribute it and/or modify 7719f82d3SEliot Blennerhassett it under the terms of version 2 of the GNU General Public License as 8719f82d3SEliot Blennerhassett published by the Free Software Foundation; 9719f82d3SEliot Blennerhassett 10719f82d3SEliot Blennerhassett This program is distributed in the hope that it will be useful, 11719f82d3SEliot Blennerhassett but WITHOUT ANY WARRANTY; without even the implied warranty of 12719f82d3SEliot Blennerhassett MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13719f82d3SEliot Blennerhassett GNU General Public License for more details. 14719f82d3SEliot Blennerhassett 15719f82d3SEliot Blennerhassett You should have received a copy of the GNU General Public License 16719f82d3SEliot Blennerhassett along with this program; if not, write to the Free Software 17719f82d3SEliot Blennerhassett Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18719f82d3SEliot Blennerhassett 19719f82d3SEliot Blennerhassett HPI internal definitions 20719f82d3SEliot Blennerhassett 21719f82d3SEliot Blennerhassett (C) Copyright AudioScience Inc. 1996-2009 22719f82d3SEliot Blennerhassett ******************************************************************************/ 23719f82d3SEliot Blennerhassett 24719f82d3SEliot Blennerhassett #ifndef _HPI_INTERNAL_H_ 25719f82d3SEliot Blennerhassett #define _HPI_INTERNAL_H_ 26719f82d3SEliot Blennerhassett 27719f82d3SEliot Blennerhassett #include "hpi.h" 28d8aefaefSEliot Blennerhassett 29719f82d3SEliot Blennerhassett /** maximum number of memory regions mapped to an adapter */ 30719f82d3SEliot Blennerhassett #define HPI_MAX_ADAPTER_MEM_SPACES (2) 31719f82d3SEliot Blennerhassett 323285ea10SEliot Blennerhassett /* Each OS needs its own hpios.h */ 33719f82d3SEliot Blennerhassett #include "hpios.h" 34719f82d3SEliot Blennerhassett 35719f82d3SEliot Blennerhassett /* physical memory allocation */ 36719f82d3SEliot Blennerhassett 37719f82d3SEliot Blennerhassett /** Allocate and map an area of locked memory for bus master DMA operations. 38719f82d3SEliot Blennerhassett 39719f82d3SEliot Blennerhassett On success, *pLockedMemeHandle is a valid handle, and 0 is returned 40719f82d3SEliot Blennerhassett On error *pLockedMemHandle marked invalid, non-zero returned. 41719f82d3SEliot Blennerhassett 42719f82d3SEliot Blennerhassett If this function succeeds, then HpiOs_LockedMem_GetVirtAddr() and 43719f82d3SEliot Blennerhassett HpiOs_LockedMem_GetPyhsAddr() will always succed on the returned handle. 44719f82d3SEliot Blennerhassett */ 4592fd918cSEliot Blennerhassett u16 hpios_locked_mem_alloc(struct consistent_dma_area *p_locked_mem_handle, 46719f82d3SEliot Blennerhassett /**< memory handle */ 473285ea10SEliot Blennerhassett u32 size, /**< Size in bytes to allocate */ 48719f82d3SEliot Blennerhassett struct pci_dev *p_os_reference 49719f82d3SEliot Blennerhassett /**< OS specific data required for memory allocation */ 50719f82d3SEliot Blennerhassett ); 51719f82d3SEliot Blennerhassett 52719f82d3SEliot Blennerhassett /** Free mapping and memory represented by LockedMemHandle 53719f82d3SEliot Blennerhassett 54719f82d3SEliot Blennerhassett Frees any resources, then invalidates the handle. 55719f82d3SEliot Blennerhassett Returns 0 on success, 1 if handle is invalid. 56719f82d3SEliot Blennerhassett 57719f82d3SEliot Blennerhassett */ 58719f82d3SEliot Blennerhassett u16 hpios_locked_mem_free(struct consistent_dma_area *locked_mem_handle); 59719f82d3SEliot Blennerhassett 60719f82d3SEliot Blennerhassett /** Get the physical PCI address of memory represented by LockedMemHandle. 61719f82d3SEliot Blennerhassett 62719f82d3SEliot Blennerhassett If handle is invalid *pPhysicalAddr is set to zero and return 1 63719f82d3SEliot Blennerhassett */ 64719f82d3SEliot Blennerhassett u16 hpios_locked_mem_get_phys_addr(struct consistent_dma_area 65719f82d3SEliot Blennerhassett *locked_mem_handle, u32 *p_physical_addr); 66719f82d3SEliot Blennerhassett 67719f82d3SEliot Blennerhassett /** Get the CPU address of of memory represented by LockedMemHandle. 68719f82d3SEliot Blennerhassett 69719f82d3SEliot Blennerhassett If handle is NULL *ppvVirtualAddr is set to NULL and return 1 70719f82d3SEliot Blennerhassett */ 71719f82d3SEliot Blennerhassett u16 hpios_locked_mem_get_virt_addr(struct consistent_dma_area 72719f82d3SEliot Blennerhassett *locked_mem_handle, void **ppv_virtual_addr); 73719f82d3SEliot Blennerhassett 74719f82d3SEliot Blennerhassett /** Check that handle is valid 75719f82d3SEliot Blennerhassett i.e it represents a valid memory area 76719f82d3SEliot Blennerhassett */ 77719f82d3SEliot Blennerhassett u16 hpios_locked_mem_valid(struct consistent_dma_area *locked_mem_handle); 78719f82d3SEliot Blennerhassett 79719f82d3SEliot Blennerhassett /* timing/delay */ 80719f82d3SEliot Blennerhassett void hpios_delay_micro_seconds(u32 num_micro_sec); 81719f82d3SEliot Blennerhassett 82719f82d3SEliot Blennerhassett struct hpi_message; 83719f82d3SEliot Blennerhassett struct hpi_response; 84719f82d3SEliot Blennerhassett 85719f82d3SEliot Blennerhassett typedef void hpi_handler_func(struct hpi_message *, struct hpi_response *); 86719f82d3SEliot Blennerhassett 87719f82d3SEliot Blennerhassett /* If the assert fails, compiler complains 88719f82d3SEliot Blennerhassett something like size of array `msg' is negative. 89719f82d3SEliot Blennerhassett Unlike linux BUILD_BUG_ON, this works outside function scope. 90719f82d3SEliot Blennerhassett */ 91719f82d3SEliot Blennerhassett #define compile_time_assert(cond, msg) \ 92719f82d3SEliot Blennerhassett typedef char ASSERT_##msg[(cond) ? 1 : -1] 93719f82d3SEliot Blennerhassett 94719f82d3SEliot Blennerhassett /******************************************* bus types */ 95719f82d3SEliot Blennerhassett enum HPI_BUSES { 96719f82d3SEliot Blennerhassett HPI_BUS_ISAPNP = 1, 97719f82d3SEliot Blennerhassett HPI_BUS_PCI = 2, 98719f82d3SEliot Blennerhassett HPI_BUS_USB = 3, 99719f82d3SEliot Blennerhassett HPI_BUS_NET = 4 100719f82d3SEliot Blennerhassett }; 101719f82d3SEliot Blennerhassett 102ba94455cSEliot Blennerhassett enum HPI_SUBSYS_OPTIONS { 103ba94455cSEliot Blennerhassett /* 0, 256 are invalid, 1..255 reserved for global options */ 104ba94455cSEliot Blennerhassett HPI_SUBSYS_OPT_NET_ENABLE = 257, 105ba94455cSEliot Blennerhassett HPI_SUBSYS_OPT_NET_BROADCAST = 258, 106ba94455cSEliot Blennerhassett HPI_SUBSYS_OPT_NET_UNICAST = 259, 107ba94455cSEliot Blennerhassett HPI_SUBSYS_OPT_NET_ADDR = 260, 108ba94455cSEliot Blennerhassett HPI_SUBSYS_OPT_NET_MASK = 261, 109ba94455cSEliot Blennerhassett HPI_SUBSYS_OPT_NET_ADAPTER_ADDRESS_ADD = 262 110ba94455cSEliot Blennerhassett }; 111ba94455cSEliot Blennerhassett 112fc3a3990SEliot Blennerhassett /** Volume flags 113fc3a3990SEliot Blennerhassett */ 114fc3a3990SEliot Blennerhassett enum HPI_VOLUME_FLAGS { 115fc3a3990SEliot Blennerhassett /** Set if the volume control is muted */ 116fc3a3990SEliot Blennerhassett HPI_VOLUME_FLAG_MUTED = (1 << 0), 117fc3a3990SEliot Blennerhassett /** Set if the volume control has a mute function */ 118fc3a3990SEliot Blennerhassett HPI_VOLUME_FLAG_HAS_MUTE = (1 << 1), 119fc3a3990SEliot Blennerhassett /** Set if volume control can do autofading */ 120fc3a3990SEliot Blennerhassett HPI_VOLUME_FLAG_HAS_AUTOFADE = (1 << 2) 121fc3a3990SEliot Blennerhassett /* Note Flags >= (1<<8) are for DSP internal use only */ 122fc3a3990SEliot Blennerhassett }; 123fc3a3990SEliot Blennerhassett 124719f82d3SEliot Blennerhassett /******************************************* CONTROL ATTRIBUTES ****/ 125719f82d3SEliot Blennerhassett /* (in order of control type ID */ 126719f82d3SEliot Blennerhassett 127719f82d3SEliot Blennerhassett /* This allows for 255 control types, 256 unique attributes each */ 1283285ea10SEliot Blennerhassett #define HPI_CTL_ATTR(ctl, ai) ((HPI_CONTROL_##ctl << 8) + ai) 129719f82d3SEliot Blennerhassett 130719f82d3SEliot Blennerhassett /* Get the sub-index of the attribute for a control type */ 131719f82d3SEliot Blennerhassett #define HPI_CTL_ATTR_INDEX(i) (i & 0xff) 132719f82d3SEliot Blennerhassett 133108ccb3fSEliot Blennerhassett /* Extract the control from the control attribute */ 134108ccb3fSEliot Blennerhassett #define HPI_CTL_ATTR_CONTROL(i) (i >> 8) 135108ccb3fSEliot Blennerhassett 136719f82d3SEliot Blennerhassett /** Enable event generation for a control. 137719f82d3SEliot Blennerhassett 0=disable, 1=enable 138719f82d3SEliot Blennerhassett \note generic to all controls that can generate events 139719f82d3SEliot Blennerhassett */ 140719f82d3SEliot Blennerhassett 1413285ea10SEliot Blennerhassett /** Unique identifiers for every control attribute 142719f82d3SEliot Blennerhassett */ 1433285ea10SEliot Blennerhassett enum HPI_CONTROL_ATTRIBUTES { 1443285ea10SEliot Blennerhassett HPI_GENERIC_ENABLE = HPI_CTL_ATTR(GENERIC, 1), 1453285ea10SEliot Blennerhassett HPI_GENERIC_EVENT_ENABLE = HPI_CTL_ATTR(GENERIC, 2), 146719f82d3SEliot Blennerhassett 1473285ea10SEliot Blennerhassett HPI_VOLUME_GAIN = HPI_CTL_ATTR(VOLUME, 1), 1483285ea10SEliot Blennerhassett HPI_VOLUME_AUTOFADE = HPI_CTL_ATTR(VOLUME, 2), 149fc3a3990SEliot Blennerhassett HPI_VOLUME_MUTE = HPI_CTL_ATTR(VOLUME, 3), 150fc3a3990SEliot Blennerhassett HPI_VOLUME_GAIN_AND_FLAGS = HPI_CTL_ATTR(VOLUME, 4), 1513285ea10SEliot Blennerhassett HPI_VOLUME_NUM_CHANNELS = HPI_CTL_ATTR(VOLUME, 6), 1523285ea10SEliot Blennerhassett HPI_VOLUME_RANGE = HPI_CTL_ATTR(VOLUME, 10), 153719f82d3SEliot Blennerhassett 1543285ea10SEliot Blennerhassett HPI_METER_RMS = HPI_CTL_ATTR(METER, 1), 1553285ea10SEliot Blennerhassett HPI_METER_PEAK = HPI_CTL_ATTR(METER, 2), 1563285ea10SEliot Blennerhassett HPI_METER_RMS_BALLISTICS = HPI_CTL_ATTR(METER, 3), 1573285ea10SEliot Blennerhassett HPI_METER_PEAK_BALLISTICS = HPI_CTL_ATTR(METER, 4), 1583285ea10SEliot Blennerhassett HPI_METER_NUM_CHANNELS = HPI_CTL_ATTR(METER, 5), 159719f82d3SEliot Blennerhassett 1603285ea10SEliot Blennerhassett HPI_MULTIPLEXER_SOURCE = HPI_CTL_ATTR(MULTIPLEXER, 1), 1613285ea10SEliot Blennerhassett HPI_MULTIPLEXER_QUERYSOURCE = HPI_CTL_ATTR(MULTIPLEXER, 2), 162719f82d3SEliot Blennerhassett 1633285ea10SEliot Blennerhassett HPI_AESEBUTX_FORMAT = HPI_CTL_ATTR(AESEBUTX, 1), 1643285ea10SEliot Blennerhassett HPI_AESEBUTX_SAMPLERATE = HPI_CTL_ATTR(AESEBUTX, 3), 1653285ea10SEliot Blennerhassett HPI_AESEBUTX_CHANNELSTATUS = HPI_CTL_ATTR(AESEBUTX, 4), 1663285ea10SEliot Blennerhassett HPI_AESEBUTX_USERDATA = HPI_CTL_ATTR(AESEBUTX, 5), 167719f82d3SEliot Blennerhassett 1683285ea10SEliot Blennerhassett HPI_AESEBURX_FORMAT = HPI_CTL_ATTR(AESEBURX, 1), 1693285ea10SEliot Blennerhassett HPI_AESEBURX_ERRORSTATUS = HPI_CTL_ATTR(AESEBURX, 2), 1703285ea10SEliot Blennerhassett HPI_AESEBURX_SAMPLERATE = HPI_CTL_ATTR(AESEBURX, 3), 1713285ea10SEliot Blennerhassett HPI_AESEBURX_CHANNELSTATUS = HPI_CTL_ATTR(AESEBURX, 4), 1723285ea10SEliot Blennerhassett HPI_AESEBURX_USERDATA = HPI_CTL_ATTR(AESEBURX, 5), 173719f82d3SEliot Blennerhassett 1743285ea10SEliot Blennerhassett HPI_LEVEL_GAIN = HPI_CTL_ATTR(LEVEL, 1), 1753285ea10SEliot Blennerhassett HPI_LEVEL_RANGE = HPI_CTL_ATTR(LEVEL, 10), 1763285ea10SEliot Blennerhassett 1773285ea10SEliot Blennerhassett HPI_TUNER_BAND = HPI_CTL_ATTR(TUNER, 1), 1783285ea10SEliot Blennerhassett HPI_TUNER_FREQ = HPI_CTL_ATTR(TUNER, 2), 1793285ea10SEliot Blennerhassett HPI_TUNER_LEVEL_AVG = HPI_CTL_ATTR(TUNER, 3), 1803285ea10SEliot Blennerhassett HPI_TUNER_LEVEL_RAW = HPI_CTL_ATTR(TUNER, 4), 1813285ea10SEliot Blennerhassett HPI_TUNER_SNR = HPI_CTL_ATTR(TUNER, 5), 1823285ea10SEliot Blennerhassett HPI_TUNER_GAIN = HPI_CTL_ATTR(TUNER, 6), 1833285ea10SEliot Blennerhassett HPI_TUNER_STATUS = HPI_CTL_ATTR(TUNER, 7), 1843285ea10SEliot Blennerhassett HPI_TUNER_MODE = HPI_CTL_ATTR(TUNER, 8), 1853285ea10SEliot Blennerhassett HPI_TUNER_RDS = HPI_CTL_ATTR(TUNER, 9), 1863285ea10SEliot Blennerhassett HPI_TUNER_DEEMPHASIS = HPI_CTL_ATTR(TUNER, 10), 1873285ea10SEliot Blennerhassett HPI_TUNER_PROGRAM = HPI_CTL_ATTR(TUNER, 11), 1883285ea10SEliot Blennerhassett HPI_TUNER_HDRADIO_SIGNAL_QUALITY = HPI_CTL_ATTR(TUNER, 12), 1893285ea10SEliot Blennerhassett HPI_TUNER_HDRADIO_SDK_VERSION = HPI_CTL_ATTR(TUNER, 13), 1903285ea10SEliot Blennerhassett HPI_TUNER_HDRADIO_DSP_VERSION = HPI_CTL_ATTR(TUNER, 14), 1913285ea10SEliot Blennerhassett HPI_TUNER_HDRADIO_BLEND = HPI_CTL_ATTR(TUNER, 15), 1923285ea10SEliot Blennerhassett 1933285ea10SEliot Blennerhassett HPI_VOX_THRESHOLD = HPI_CTL_ATTR(VOX, 1), 1943285ea10SEliot Blennerhassett 1953285ea10SEliot Blennerhassett HPI_CHANNEL_MODE_MODE = HPI_CTL_ATTR(CHANNEL_MODE, 1), 1963285ea10SEliot Blennerhassett 1973285ea10SEliot Blennerhassett HPI_BITSTREAM_DATA_POLARITY = HPI_CTL_ATTR(BITSTREAM, 1), 1983285ea10SEliot Blennerhassett HPI_BITSTREAM_CLOCK_EDGE = HPI_CTL_ATTR(BITSTREAM, 2), 1993285ea10SEliot Blennerhassett HPI_BITSTREAM_CLOCK_SOURCE = HPI_CTL_ATTR(BITSTREAM, 3), 2003285ea10SEliot Blennerhassett HPI_BITSTREAM_ACTIVITY = HPI_CTL_ATTR(BITSTREAM, 4), 2013285ea10SEliot Blennerhassett 2023285ea10SEliot Blennerhassett HPI_SAMPLECLOCK_SOURCE = HPI_CTL_ATTR(SAMPLECLOCK, 1), 2033285ea10SEliot Blennerhassett HPI_SAMPLECLOCK_SAMPLERATE = HPI_CTL_ATTR(SAMPLECLOCK, 2), 2043285ea10SEliot Blennerhassett HPI_SAMPLECLOCK_SOURCE_INDEX = HPI_CTL_ATTR(SAMPLECLOCK, 3), 2053285ea10SEliot Blennerhassett HPI_SAMPLECLOCK_LOCAL_SAMPLERATE = HPI_CTL_ATTR(SAMPLECLOCK, 4), 2063285ea10SEliot Blennerhassett HPI_SAMPLECLOCK_AUTO = HPI_CTL_ATTR(SAMPLECLOCK, 5), 2073285ea10SEliot Blennerhassett HPI_SAMPLECLOCK_LOCAL_LOCK = HPI_CTL_ATTR(SAMPLECLOCK, 6), 2083285ea10SEliot Blennerhassett 2093285ea10SEliot Blennerhassett HPI_MICROPHONE_PHANTOM_POWER = HPI_CTL_ATTR(MICROPHONE, 1), 2103285ea10SEliot Blennerhassett 2113285ea10SEliot Blennerhassett HPI_EQUALIZER_NUM_FILTERS = HPI_CTL_ATTR(EQUALIZER, 1), 2123285ea10SEliot Blennerhassett HPI_EQUALIZER_FILTER = HPI_CTL_ATTR(EQUALIZER, 2), 2133285ea10SEliot Blennerhassett HPI_EQUALIZER_COEFFICIENTS = HPI_CTL_ATTR(EQUALIZER, 3), 2143285ea10SEliot Blennerhassett 2153285ea10SEliot Blennerhassett HPI_COMPANDER_PARAMS = HPI_CTL_ATTR(COMPANDER, 1), 2163285ea10SEliot Blennerhassett HPI_COMPANDER_MAKEUPGAIN = HPI_CTL_ATTR(COMPANDER, 2), 2173285ea10SEliot Blennerhassett HPI_COMPANDER_THRESHOLD = HPI_CTL_ATTR(COMPANDER, 3), 2183285ea10SEliot Blennerhassett HPI_COMPANDER_RATIO = HPI_CTL_ATTR(COMPANDER, 4), 2193285ea10SEliot Blennerhassett HPI_COMPANDER_ATTACK = HPI_CTL_ATTR(COMPANDER, 5), 2203285ea10SEliot Blennerhassett HPI_COMPANDER_DECAY = HPI_CTL_ATTR(COMPANDER, 6), 2213285ea10SEliot Blennerhassett 2223285ea10SEliot Blennerhassett HPI_COBRANET_SET = HPI_CTL_ATTR(COBRANET, 1), 2233285ea10SEliot Blennerhassett HPI_COBRANET_GET = HPI_CTL_ATTR(COBRANET, 2), 2243285ea10SEliot Blennerhassett HPI_COBRANET_GET_STATUS = HPI_CTL_ATTR(COBRANET, 5), 2253285ea10SEliot Blennerhassett HPI_COBRANET_SEND_PACKET = HPI_CTL_ATTR(COBRANET, 6), 2263285ea10SEliot Blennerhassett HPI_COBRANET_GET_PACKET = HPI_CTL_ATTR(COBRANET, 7), 2273285ea10SEliot Blennerhassett 2283285ea10SEliot Blennerhassett HPI_TONEDETECTOR_THRESHOLD = HPI_CTL_ATTR(TONEDETECTOR, 1), 2293285ea10SEliot Blennerhassett HPI_TONEDETECTOR_STATE = HPI_CTL_ATTR(TONEDETECTOR, 2), 2303285ea10SEliot Blennerhassett HPI_TONEDETECTOR_FREQUENCY = HPI_CTL_ATTR(TONEDETECTOR, 3), 2313285ea10SEliot Blennerhassett 2323285ea10SEliot Blennerhassett HPI_SILENCEDETECTOR_THRESHOLD = HPI_CTL_ATTR(SILENCEDETECTOR, 1), 2333285ea10SEliot Blennerhassett HPI_SILENCEDETECTOR_STATE = HPI_CTL_ATTR(SILENCEDETECTOR, 2), 2343285ea10SEliot Blennerhassett HPI_SILENCEDETECTOR_DELAY = HPI_CTL_ATTR(SILENCEDETECTOR, 3), 2353285ea10SEliot Blennerhassett 2363285ea10SEliot Blennerhassett HPI_PAD_CHANNEL_NAME = HPI_CTL_ATTR(PAD, 1), 2373285ea10SEliot Blennerhassett HPI_PAD_ARTIST = HPI_CTL_ATTR(PAD, 2), 2383285ea10SEliot Blennerhassett HPI_PAD_TITLE = HPI_CTL_ATTR(PAD, 3), 2393285ea10SEliot Blennerhassett HPI_PAD_COMMENT = HPI_CTL_ATTR(PAD, 4), 2403285ea10SEliot Blennerhassett HPI_PAD_PROGRAM_TYPE = HPI_CTL_ATTR(PAD, 5), 2413285ea10SEliot Blennerhassett HPI_PAD_PROGRAM_ID = HPI_CTL_ATTR(PAD, 6), 2423285ea10SEliot Blennerhassett HPI_PAD_TA_SUPPORT = HPI_CTL_ATTR(PAD, 7), 24372868339SEliot Blennerhassett HPI_PAD_TA_ACTIVE = HPI_CTL_ATTR(PAD, 8), 24472868339SEliot Blennerhassett 24572868339SEliot Blennerhassett HPI_UNIVERSAL_ENTITY = HPI_CTL_ATTR(UNIVERSAL, 1) 2463285ea10SEliot Blennerhassett }; 247719f82d3SEliot Blennerhassett 248719f82d3SEliot Blennerhassett #define HPI_POLARITY_POSITIVE 0 249719f82d3SEliot Blennerhassett #define HPI_POLARITY_NEGATIVE 1 250719f82d3SEliot Blennerhassett 251719f82d3SEliot Blennerhassett /*------------------------------------------------------------ 252719f82d3SEliot Blennerhassett Cobranet Chip Bridge - copied from HMI.H 253719f82d3SEliot Blennerhassett ------------------------------------------------------------*/ 254719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_bridge 0x20000 255719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_bridge_tx_pkt_buf \ 256719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_bridge + 0x1000) 257719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_bridge_rx_pkt_buf \ 258719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_bridge + 0x2000) 259719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_if_table1 0x110000 260719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_if_phy_address \ 261719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_if_table1 + 0xd) 262719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_protocolIP 0x72000 263719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_ip_mon_currentIP \ 264719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_protocolIP + 0x0) 265719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_ip_mon_staticIP \ 266719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_protocolIP + 0x2) 267719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_sys 0x100000 268719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_sys_desc \ 269719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_sys + 0x0) 270719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_sys_objectID \ 271719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_sys + 0x100) 272719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_sys_contact \ 273719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_sys + 0x200) 274719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_sys_name \ 275719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_sys + 0x300) 276719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_cobra_sys_location \ 277719f82d3SEliot Blennerhassett (HPI_COBRANET_HMI_cobra_sys + 0x400) 278719f82d3SEliot Blennerhassett 279719f82d3SEliot Blennerhassett /*------------------------------------------------------------ 280719f82d3SEliot Blennerhassett Cobranet Chip Status bits 281719f82d3SEliot Blennerhassett ------------------------------------------------------------*/ 282719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_STATUS_RXPACKET 2 283719f82d3SEliot Blennerhassett #define HPI_COBRANET_HMI_STATUS_TXPACKET 3 284719f82d3SEliot Blennerhassett 285719f82d3SEliot Blennerhassett /*------------------------------------------------------------ 286719f82d3SEliot Blennerhassett Ethernet header size 287719f82d3SEliot Blennerhassett ------------------------------------------------------------*/ 288719f82d3SEliot Blennerhassett #define HPI_ETHERNET_HEADER_SIZE (16) 289719f82d3SEliot Blennerhassett 290719f82d3SEliot Blennerhassett /* These defines are used to fill in protocol information for an Ethernet packet 291719f82d3SEliot Blennerhassett sent using HMI on CS18102 */ 2926d0b898eSEliot Blennerhassett /** ID supplied by Cirrus for ASI packets. */ 293719f82d3SEliot Blennerhassett #define HPI_ETHERNET_PACKET_ID 0x85 294719f82d3SEliot Blennerhassett /** Simple packet - no special routing required */ 295719f82d3SEliot Blennerhassett #define HPI_ETHERNET_PACKET_V1 0x01 296719f82d3SEliot Blennerhassett /** This packet must make its way to the host across the HPI interface */ 297719f82d3SEliot Blennerhassett #define HPI_ETHERNET_PACKET_HOSTED_VIA_HMI 0x20 298719f82d3SEliot Blennerhassett /** This packet must make its way to the host across the HPI interface */ 299719f82d3SEliot Blennerhassett #define HPI_ETHERNET_PACKET_HOSTED_VIA_HMI_V1 0x21 300719f82d3SEliot Blennerhassett /** This packet must make its way to the host across the HPI interface */ 301719f82d3SEliot Blennerhassett #define HPI_ETHERNET_PACKET_HOSTED_VIA_HPI 0x40 302719f82d3SEliot Blennerhassett /** This packet must make its way to the host across the HPI interface */ 303719f82d3SEliot Blennerhassett #define HPI_ETHERNET_PACKET_HOSTED_VIA_HPI_V1 0x41 304719f82d3SEliot Blennerhassett 3056d0b898eSEliot Blennerhassett #define HPI_ETHERNET_UDP_PORT 44600 /**< HPI UDP service */ 306719f82d3SEliot Blennerhassett 307a287ca2aSEliot Blennerhassett /** Default network timeout in milli-seconds. */ 308a287ca2aSEliot Blennerhassett #define HPI_ETHERNET_TIMEOUT_MS 500 309719f82d3SEliot Blennerhassett 3103285ea10SEliot Blennerhassett /** Locked memory buffer alloc/free phases */ 3113285ea10SEliot Blennerhassett enum HPI_BUFFER_CMDS { 312719f82d3SEliot Blennerhassett /** use one message to allocate or free physical memory */ 3133285ea10SEliot Blennerhassett HPI_BUFFER_CMD_EXTERNAL = 0, 314719f82d3SEliot Blennerhassett /** alloc physical memory */ 3153285ea10SEliot Blennerhassett HPI_BUFFER_CMD_INTERNAL_ALLOC = 1, 316719f82d3SEliot Blennerhassett /** send physical memory address to adapter */ 3173285ea10SEliot Blennerhassett HPI_BUFFER_CMD_INTERNAL_GRANTADAPTER = 2, 318719f82d3SEliot Blennerhassett /** notify adapter to stop using physical buffer */ 3193285ea10SEliot Blennerhassett HPI_BUFFER_CMD_INTERNAL_REVOKEADAPTER = 3, 320719f82d3SEliot Blennerhassett /** free physical buffer */ 3213285ea10SEliot Blennerhassett HPI_BUFFER_CMD_INTERNAL_FREE = 4 3223285ea10SEliot Blennerhassett }; 323719f82d3SEliot Blennerhassett 324719f82d3SEliot Blennerhassett /*****************************************************************************/ 325719f82d3SEliot Blennerhassett /*****************************************************************************/ 326719f82d3SEliot Blennerhassett /******** HPI LOW LEVEL MESSAGES *******/ 327719f82d3SEliot Blennerhassett /*****************************************************************************/ 328719f82d3SEliot Blennerhassett /*****************************************************************************/ 329719f82d3SEliot Blennerhassett /** Pnp ids */ 330719f82d3SEliot Blennerhassett /** "ASI" - actual is "ASX" - need to change */ 331719f82d3SEliot Blennerhassett #define HPI_ID_ISAPNP_AUDIOSCIENCE 0x0669 332719f82d3SEliot Blennerhassett /** PCI vendor ID that AudioScience uses */ 333719f82d3SEliot Blennerhassett #define HPI_PCI_VENDOR_ID_AUDIOSCIENCE 0x175C 334719f82d3SEliot Blennerhassett /** PCI vendor ID that the DSP56301 has */ 335719f82d3SEliot Blennerhassett #define HPI_PCI_VENDOR_ID_MOTOROLA 0x1057 336719f82d3SEliot Blennerhassett /** PCI vendor ID that TI uses */ 337719f82d3SEliot Blennerhassett #define HPI_PCI_VENDOR_ID_TI 0x104C 338719f82d3SEliot Blennerhassett 339719f82d3SEliot Blennerhassett #define HPI_PCI_DEV_ID_PCI2040 0xAC60 340719f82d3SEliot Blennerhassett /** TI's C6205 PCI interface has this ID */ 341719f82d3SEliot Blennerhassett #define HPI_PCI_DEV_ID_DSP6205 0xA106 342719f82d3SEliot Blennerhassett 343719f82d3SEliot Blennerhassett #define HPI_USB_VENDOR_ID_AUDIOSCIENCE 0x1257 344719f82d3SEliot Blennerhassett #define HPI_USB_W2K_TAG 0x57495341 /* "ASIW" */ 345719f82d3SEliot Blennerhassett #define HPI_USB_LINUX_TAG 0x4C495341 /* "ASIL" */ 346719f82d3SEliot Blennerhassett 3473285ea10SEliot Blennerhassett /** Invalid Adapter index 3483285ea10SEliot Blennerhassett Used in HPI messages that are not addressed to a specific adapter 3493285ea10SEliot Blennerhassett Used in DLL to indicate device not present 3503285ea10SEliot Blennerhassett */ 3513285ea10SEliot Blennerhassett #define HPI_ADAPTER_INDEX_INVALID 0xFFFF 3523285ea10SEliot Blennerhassett 353719f82d3SEliot Blennerhassett /** First 2 hex digits define the adapter family */ 354719f82d3SEliot Blennerhassett #define HPI_ADAPTER_FAMILY_MASK 0xff00 3555a498ef1SEliot Blennerhassett #define HPI_MODULE_FAMILY_MASK 0xfff0 356719f82d3SEliot Blennerhassett 357719f82d3SEliot Blennerhassett #define HPI_ADAPTER_FAMILY_ASI(f) (f & HPI_ADAPTER_FAMILY_MASK) 3585a498ef1SEliot Blennerhassett #define HPI_MODULE_FAMILY_ASI(f) (f & HPI_MODULE_FAMILY_MASK) 359719f82d3SEliot Blennerhassett #define HPI_ADAPTER_ASI(f) (f) 360719f82d3SEliot Blennerhassett 3613285ea10SEliot Blennerhassett enum HPI_MESSAGE_TYPES { 36282b5774fSEliot Blennerhassett HPI_TYPE_REQUEST = 1, 3633285ea10SEliot Blennerhassett HPI_TYPE_RESPONSE = 2, 3643285ea10SEliot Blennerhassett HPI_TYPE_DATA = 3, 365b7f12482SEliot Blennerhassett HPI_TYPE_SSX2BYPASS_MESSAGE = 4, 366b7f12482SEliot Blennerhassett HPI_TYPE_COMMAND = 5, 367b7f12482SEliot Blennerhassett HPI_TYPE_NOTIFICATION = 6 3683285ea10SEliot Blennerhassett }; 369719f82d3SEliot Blennerhassett 3703285ea10SEliot Blennerhassett enum HPI_OBJECT_TYPES { 3713285ea10SEliot Blennerhassett HPI_OBJ_SUBSYSTEM = 1, 3723285ea10SEliot Blennerhassett HPI_OBJ_ADAPTER = 2, 3733285ea10SEliot Blennerhassett HPI_OBJ_OSTREAM = 3, 3743285ea10SEliot Blennerhassett HPI_OBJ_ISTREAM = 4, 3753285ea10SEliot Blennerhassett HPI_OBJ_MIXER = 5, 3763285ea10SEliot Blennerhassett HPI_OBJ_NODE = 6, 3773285ea10SEliot Blennerhassett HPI_OBJ_CONTROL = 7, 3783285ea10SEliot Blennerhassett HPI_OBJ_NVMEMORY = 8, 3793285ea10SEliot Blennerhassett HPI_OBJ_GPIO = 9, 3803285ea10SEliot Blennerhassett HPI_OBJ_WATCHDOG = 10, 3813285ea10SEliot Blennerhassett HPI_OBJ_CLOCK = 11, 3823285ea10SEliot Blennerhassett HPI_OBJ_PROFILE = 12, 38358fbf77fSEliot Blennerhassett /* HPI_ OBJ_ CONTROLEX = 13, */ 3843285ea10SEliot Blennerhassett HPI_OBJ_ASYNCEVENT = 14 385719f82d3SEliot Blennerhassett #define HPI_OBJ_MAXINDEX 14 3863285ea10SEliot Blennerhassett }; 387719f82d3SEliot Blennerhassett 388719f82d3SEliot Blennerhassett #define HPI_OBJ_FUNCTION_SPACING 0x100 389a287ca2aSEliot Blennerhassett #define HPI_FUNC_ID(obj, i) (HPI_OBJ_##obj * HPI_OBJ_FUNCTION_SPACING + i) 3903285ea10SEliot Blennerhassett 391719f82d3SEliot Blennerhassett #define HPI_EXTRACT_INDEX(fn) (fn & 0xff) 392719f82d3SEliot Blennerhassett 3933285ea10SEliot Blennerhassett enum HPI_FUNCTION_IDS { 3943285ea10SEliot Blennerhassett HPI_SUBSYS_OPEN = HPI_FUNC_ID(SUBSYSTEM, 1), 3953285ea10SEliot Blennerhassett HPI_SUBSYS_GET_VERSION = HPI_FUNC_ID(SUBSYSTEM, 2), 3963285ea10SEliot Blennerhassett HPI_SUBSYS_GET_INFO = HPI_FUNC_ID(SUBSYSTEM, 3), 3973285ea10SEliot Blennerhassett HPI_SUBSYS_CREATE_ADAPTER = HPI_FUNC_ID(SUBSYSTEM, 5), 3983285ea10SEliot Blennerhassett HPI_SUBSYS_CLOSE = HPI_FUNC_ID(SUBSYSTEM, 6), 3993285ea10SEliot Blennerhassett HPI_SUBSYS_DRIVER_LOAD = HPI_FUNC_ID(SUBSYSTEM, 8), 4003285ea10SEliot Blennerhassett HPI_SUBSYS_DRIVER_UNLOAD = HPI_FUNC_ID(SUBSYSTEM, 9), 4013285ea10SEliot Blennerhassett HPI_SUBSYS_GET_NUM_ADAPTERS = HPI_FUNC_ID(SUBSYSTEM, 12), 4023285ea10SEliot Blennerhassett HPI_SUBSYS_GET_ADAPTER = HPI_FUNC_ID(SUBSYSTEM, 13), 4033285ea10SEliot Blennerhassett HPI_SUBSYS_SET_NETWORK_INTERFACE = HPI_FUNC_ID(SUBSYSTEM, 14), 4043285ea10SEliot Blennerhassett HPI_SUBSYS_OPTION_INFO = HPI_FUNC_ID(SUBSYSTEM, 15), 4053285ea10SEliot Blennerhassett HPI_SUBSYS_OPTION_GET = HPI_FUNC_ID(SUBSYSTEM, 16), 4063285ea10SEliot Blennerhassett HPI_SUBSYS_OPTION_SET = HPI_FUNC_ID(SUBSYSTEM, 17), 4073285ea10SEliot Blennerhassett #define HPI_SUBSYS_FUNCTION_COUNT 17 4083285ea10SEliot Blennerhassett 4093285ea10SEliot Blennerhassett HPI_ADAPTER_OPEN = HPI_FUNC_ID(ADAPTER, 1), 4103285ea10SEliot Blennerhassett HPI_ADAPTER_CLOSE = HPI_FUNC_ID(ADAPTER, 2), 4113285ea10SEliot Blennerhassett HPI_ADAPTER_GET_INFO = HPI_FUNC_ID(ADAPTER, 3), 4123285ea10SEliot Blennerhassett HPI_ADAPTER_GET_ASSERT = HPI_FUNC_ID(ADAPTER, 4), 4133285ea10SEliot Blennerhassett HPI_ADAPTER_TEST_ASSERT = HPI_FUNC_ID(ADAPTER, 5), 4143285ea10SEliot Blennerhassett HPI_ADAPTER_SET_MODE = HPI_FUNC_ID(ADAPTER, 6), 4153285ea10SEliot Blennerhassett HPI_ADAPTER_GET_MODE = HPI_FUNC_ID(ADAPTER, 7), 4163285ea10SEliot Blennerhassett HPI_ADAPTER_ENABLE_CAPABILITY = HPI_FUNC_ID(ADAPTER, 8), 4173285ea10SEliot Blennerhassett HPI_ADAPTER_SELFTEST = HPI_FUNC_ID(ADAPTER, 9), 4183285ea10SEliot Blennerhassett HPI_ADAPTER_FIND_OBJECT = HPI_FUNC_ID(ADAPTER, 10), 4193285ea10SEliot Blennerhassett HPI_ADAPTER_QUERY_FLASH = HPI_FUNC_ID(ADAPTER, 11), 4203285ea10SEliot Blennerhassett HPI_ADAPTER_START_FLASH = HPI_FUNC_ID(ADAPTER, 12), 4213285ea10SEliot Blennerhassett HPI_ADAPTER_PROGRAM_FLASH = HPI_FUNC_ID(ADAPTER, 13), 4223285ea10SEliot Blennerhassett HPI_ADAPTER_SET_PROPERTY = HPI_FUNC_ID(ADAPTER, 14), 4233285ea10SEliot Blennerhassett HPI_ADAPTER_GET_PROPERTY = HPI_FUNC_ID(ADAPTER, 15), 4243285ea10SEliot Blennerhassett HPI_ADAPTER_ENUM_PROPERTY = HPI_FUNC_ID(ADAPTER, 16), 4253285ea10SEliot Blennerhassett HPI_ADAPTER_MODULE_INFO = HPI_FUNC_ID(ADAPTER, 17), 4263285ea10SEliot Blennerhassett HPI_ADAPTER_DEBUG_READ = HPI_FUNC_ID(ADAPTER, 18), 427bd33c1caSEliot Blennerhassett HPI_ADAPTER_IRQ_QUERY_AND_CLEAR = HPI_FUNC_ID(ADAPTER, 19), 428bd33c1caSEliot Blennerhassett HPI_ADAPTER_IRQ_CALLBACK = HPI_FUNC_ID(ADAPTER, 20), 4296d0b898eSEliot Blennerhassett HPI_ADAPTER_DELETE = HPI_FUNC_ID(ADAPTER, 21), 43072868339SEliot Blennerhassett HPI_ADAPTER_READ_FLASH = HPI_FUNC_ID(ADAPTER, 22), 43172868339SEliot Blennerhassett HPI_ADAPTER_END_FLASH = HPI_FUNC_ID(ADAPTER, 23), 43272868339SEliot Blennerhassett HPI_ADAPTER_FILESTORE_DELETE_ALL = HPI_FUNC_ID(ADAPTER, 24), 43372868339SEliot Blennerhassett #define HPI_ADAPTER_FUNCTION_COUNT 24 4343285ea10SEliot Blennerhassett 4353285ea10SEliot Blennerhassett HPI_OSTREAM_OPEN = HPI_FUNC_ID(OSTREAM, 1), 4363285ea10SEliot Blennerhassett HPI_OSTREAM_CLOSE = HPI_FUNC_ID(OSTREAM, 2), 4373285ea10SEliot Blennerhassett HPI_OSTREAM_WRITE = HPI_FUNC_ID(OSTREAM, 3), 4383285ea10SEliot Blennerhassett HPI_OSTREAM_START = HPI_FUNC_ID(OSTREAM, 4), 4393285ea10SEliot Blennerhassett HPI_OSTREAM_STOP = HPI_FUNC_ID(OSTREAM, 5), 4403285ea10SEliot Blennerhassett HPI_OSTREAM_RESET = HPI_FUNC_ID(OSTREAM, 6), 4413285ea10SEliot Blennerhassett HPI_OSTREAM_GET_INFO = HPI_FUNC_ID(OSTREAM, 7), 4423285ea10SEliot Blennerhassett HPI_OSTREAM_QUERY_FORMAT = HPI_FUNC_ID(OSTREAM, 8), 4433285ea10SEliot Blennerhassett HPI_OSTREAM_DATA = HPI_FUNC_ID(OSTREAM, 9), 4443285ea10SEliot Blennerhassett HPI_OSTREAM_SET_VELOCITY = HPI_FUNC_ID(OSTREAM, 10), 4453285ea10SEliot Blennerhassett HPI_OSTREAM_SET_PUNCHINOUT = HPI_FUNC_ID(OSTREAM, 11), 4463285ea10SEliot Blennerhassett HPI_OSTREAM_SINEGEN = HPI_FUNC_ID(OSTREAM, 12), 4473285ea10SEliot Blennerhassett HPI_OSTREAM_ANC_RESET = HPI_FUNC_ID(OSTREAM, 13), 4483285ea10SEliot Blennerhassett HPI_OSTREAM_ANC_GET_INFO = HPI_FUNC_ID(OSTREAM, 14), 4493285ea10SEliot Blennerhassett HPI_OSTREAM_ANC_READ = HPI_FUNC_ID(OSTREAM, 15), 4503285ea10SEliot Blennerhassett HPI_OSTREAM_SET_TIMESCALE = HPI_FUNC_ID(OSTREAM, 16), 4513285ea10SEliot Blennerhassett HPI_OSTREAM_SET_FORMAT = HPI_FUNC_ID(OSTREAM, 17), 4523285ea10SEliot Blennerhassett HPI_OSTREAM_HOSTBUFFER_ALLOC = HPI_FUNC_ID(OSTREAM, 18), 4533285ea10SEliot Blennerhassett HPI_OSTREAM_HOSTBUFFER_FREE = HPI_FUNC_ID(OSTREAM, 19), 4543285ea10SEliot Blennerhassett HPI_OSTREAM_GROUP_ADD = HPI_FUNC_ID(OSTREAM, 20), 4553285ea10SEliot Blennerhassett HPI_OSTREAM_GROUP_GETMAP = HPI_FUNC_ID(OSTREAM, 21), 4563285ea10SEliot Blennerhassett HPI_OSTREAM_GROUP_RESET = HPI_FUNC_ID(OSTREAM, 22), 4573285ea10SEliot Blennerhassett HPI_OSTREAM_HOSTBUFFER_GET_INFO = HPI_FUNC_ID(OSTREAM, 23), 4583285ea10SEliot Blennerhassett HPI_OSTREAM_WAIT_START = HPI_FUNC_ID(OSTREAM, 24), 459bd33c1caSEliot Blennerhassett HPI_OSTREAM_WAIT = HPI_FUNC_ID(OSTREAM, 25), 460bd33c1caSEliot Blennerhassett #define HPI_OSTREAM_FUNCTION_COUNT 25 4613285ea10SEliot Blennerhassett 4623285ea10SEliot Blennerhassett HPI_ISTREAM_OPEN = HPI_FUNC_ID(ISTREAM, 1), 4633285ea10SEliot Blennerhassett HPI_ISTREAM_CLOSE = HPI_FUNC_ID(ISTREAM, 2), 4643285ea10SEliot Blennerhassett HPI_ISTREAM_SET_FORMAT = HPI_FUNC_ID(ISTREAM, 3), 4653285ea10SEliot Blennerhassett HPI_ISTREAM_READ = HPI_FUNC_ID(ISTREAM, 4), 4663285ea10SEliot Blennerhassett HPI_ISTREAM_START = HPI_FUNC_ID(ISTREAM, 5), 4673285ea10SEliot Blennerhassett HPI_ISTREAM_STOP = HPI_FUNC_ID(ISTREAM, 6), 4683285ea10SEliot Blennerhassett HPI_ISTREAM_RESET = HPI_FUNC_ID(ISTREAM, 7), 4693285ea10SEliot Blennerhassett HPI_ISTREAM_GET_INFO = HPI_FUNC_ID(ISTREAM, 8), 4703285ea10SEliot Blennerhassett HPI_ISTREAM_QUERY_FORMAT = HPI_FUNC_ID(ISTREAM, 9), 4713285ea10SEliot Blennerhassett HPI_ISTREAM_ANC_RESET = HPI_FUNC_ID(ISTREAM, 10), 4723285ea10SEliot Blennerhassett HPI_ISTREAM_ANC_GET_INFO = HPI_FUNC_ID(ISTREAM, 11), 4733285ea10SEliot Blennerhassett HPI_ISTREAM_ANC_WRITE = HPI_FUNC_ID(ISTREAM, 12), 4743285ea10SEliot Blennerhassett HPI_ISTREAM_HOSTBUFFER_ALLOC = HPI_FUNC_ID(ISTREAM, 13), 4753285ea10SEliot Blennerhassett HPI_ISTREAM_HOSTBUFFER_FREE = HPI_FUNC_ID(ISTREAM, 14), 4763285ea10SEliot Blennerhassett HPI_ISTREAM_GROUP_ADD = HPI_FUNC_ID(ISTREAM, 15), 4773285ea10SEliot Blennerhassett HPI_ISTREAM_GROUP_GETMAP = HPI_FUNC_ID(ISTREAM, 16), 4783285ea10SEliot Blennerhassett HPI_ISTREAM_GROUP_RESET = HPI_FUNC_ID(ISTREAM, 17), 4793285ea10SEliot Blennerhassett HPI_ISTREAM_HOSTBUFFER_GET_INFO = HPI_FUNC_ID(ISTREAM, 18), 4803285ea10SEliot Blennerhassett HPI_ISTREAM_WAIT_START = HPI_FUNC_ID(ISTREAM, 19), 481bd33c1caSEliot Blennerhassett HPI_ISTREAM_WAIT = HPI_FUNC_ID(ISTREAM, 20), 482bd33c1caSEliot Blennerhassett #define HPI_ISTREAM_FUNCTION_COUNT 20 4833285ea10SEliot Blennerhassett 484719f82d3SEliot Blennerhassett /* NOTE: 485719f82d3SEliot Blennerhassett GET_NODE_INFO, SET_CONNECTION, GET_CONNECTIONS are not currently used */ 4863285ea10SEliot Blennerhassett HPI_MIXER_OPEN = HPI_FUNC_ID(MIXER, 1), 4873285ea10SEliot Blennerhassett HPI_MIXER_CLOSE = HPI_FUNC_ID(MIXER, 2), 4883285ea10SEliot Blennerhassett HPI_MIXER_GET_INFO = HPI_FUNC_ID(MIXER, 3), 4893285ea10SEliot Blennerhassett HPI_MIXER_GET_NODE_INFO = HPI_FUNC_ID(MIXER, 4), 4903285ea10SEliot Blennerhassett HPI_MIXER_GET_CONTROL = HPI_FUNC_ID(MIXER, 5), 4913285ea10SEliot Blennerhassett HPI_MIXER_SET_CONNECTION = HPI_FUNC_ID(MIXER, 6), 4923285ea10SEliot Blennerhassett HPI_MIXER_GET_CONNECTIONS = HPI_FUNC_ID(MIXER, 7), 4933285ea10SEliot Blennerhassett HPI_MIXER_GET_CONTROL_BY_INDEX = HPI_FUNC_ID(MIXER, 8), 4943285ea10SEliot Blennerhassett HPI_MIXER_GET_CONTROL_ARRAY_BY_INDEX = HPI_FUNC_ID(MIXER, 9), 4953285ea10SEliot Blennerhassett HPI_MIXER_GET_CONTROL_MULTIPLE_VALUES = HPI_FUNC_ID(MIXER, 10), 4963285ea10SEliot Blennerhassett HPI_MIXER_STORE = HPI_FUNC_ID(MIXER, 11), 497bd33c1caSEliot Blennerhassett HPI_MIXER_GET_CACHE_INFO = HPI_FUNC_ID(MIXER, 12), 49872868339SEliot Blennerhassett HPI_MIXER_GET_BLOCK_HANDLE = HPI_FUNC_ID(MIXER, 13), 49972868339SEliot Blennerhassett HPI_MIXER_GET_PARAMETER_HANDLE = HPI_FUNC_ID(MIXER, 14), 50072868339SEliot Blennerhassett #define HPI_MIXER_FUNCTION_COUNT 14 5013285ea10SEliot Blennerhassett 5023285ea10SEliot Blennerhassett HPI_CONTROL_GET_INFO = HPI_FUNC_ID(CONTROL, 1), 5033285ea10SEliot Blennerhassett HPI_CONTROL_GET_STATE = HPI_FUNC_ID(CONTROL, 2), 5043285ea10SEliot Blennerhassett HPI_CONTROL_SET_STATE = HPI_FUNC_ID(CONTROL, 3), 505719f82d3SEliot Blennerhassett #define HPI_CONTROL_FUNCTION_COUNT 3 5063285ea10SEliot Blennerhassett 5073285ea10SEliot Blennerhassett HPI_NVMEMORY_OPEN = HPI_FUNC_ID(NVMEMORY, 1), 5083285ea10SEliot Blennerhassett HPI_NVMEMORY_READ_BYTE = HPI_FUNC_ID(NVMEMORY, 2), 5093285ea10SEliot Blennerhassett HPI_NVMEMORY_WRITE_BYTE = HPI_FUNC_ID(NVMEMORY, 3), 510719f82d3SEliot Blennerhassett #define HPI_NVMEMORY_FUNCTION_COUNT 3 5113285ea10SEliot Blennerhassett 5123285ea10SEliot Blennerhassett HPI_GPIO_OPEN = HPI_FUNC_ID(GPIO, 1), 5133285ea10SEliot Blennerhassett HPI_GPIO_READ_BIT = HPI_FUNC_ID(GPIO, 2), 5143285ea10SEliot Blennerhassett HPI_GPIO_WRITE_BIT = HPI_FUNC_ID(GPIO, 3), 5153285ea10SEliot Blennerhassett HPI_GPIO_READ_ALL = HPI_FUNC_ID(GPIO, 4), 5163285ea10SEliot Blennerhassett HPI_GPIO_WRITE_STATUS = HPI_FUNC_ID(GPIO, 5), 517719f82d3SEliot Blennerhassett #define HPI_GPIO_FUNCTION_COUNT 5 5183285ea10SEliot Blennerhassett 5193285ea10SEliot Blennerhassett HPI_ASYNCEVENT_OPEN = HPI_FUNC_ID(ASYNCEVENT, 1), 5203285ea10SEliot Blennerhassett HPI_ASYNCEVENT_CLOSE = HPI_FUNC_ID(ASYNCEVENT, 2), 5213285ea10SEliot Blennerhassett HPI_ASYNCEVENT_WAIT = HPI_FUNC_ID(ASYNCEVENT, 3), 5223285ea10SEliot Blennerhassett HPI_ASYNCEVENT_GETCOUNT = HPI_FUNC_ID(ASYNCEVENT, 4), 5233285ea10SEliot Blennerhassett HPI_ASYNCEVENT_GET = HPI_FUNC_ID(ASYNCEVENT, 5), 5243285ea10SEliot Blennerhassett HPI_ASYNCEVENT_SENDEVENTS = HPI_FUNC_ID(ASYNCEVENT, 6), 525719f82d3SEliot Blennerhassett #define HPI_ASYNCEVENT_FUNCTION_COUNT 6 5263285ea10SEliot Blennerhassett 5273285ea10SEliot Blennerhassett HPI_WATCHDOG_OPEN = HPI_FUNC_ID(WATCHDOG, 1), 5283285ea10SEliot Blennerhassett HPI_WATCHDOG_SET_TIME = HPI_FUNC_ID(WATCHDOG, 2), 5293285ea10SEliot Blennerhassett HPI_WATCHDOG_PING = HPI_FUNC_ID(WATCHDOG, 3), 5303285ea10SEliot Blennerhassett 5313285ea10SEliot Blennerhassett HPI_CLOCK_OPEN = HPI_FUNC_ID(CLOCK, 1), 5323285ea10SEliot Blennerhassett HPI_CLOCK_SET_TIME = HPI_FUNC_ID(CLOCK, 2), 5333285ea10SEliot Blennerhassett HPI_CLOCK_GET_TIME = HPI_FUNC_ID(CLOCK, 3), 5343285ea10SEliot Blennerhassett 5353285ea10SEliot Blennerhassett HPI_PROFILE_OPEN_ALL = HPI_FUNC_ID(PROFILE, 1), 5363285ea10SEliot Blennerhassett HPI_PROFILE_START_ALL = HPI_FUNC_ID(PROFILE, 2), 5373285ea10SEliot Blennerhassett HPI_PROFILE_STOP_ALL = HPI_FUNC_ID(PROFILE, 3), 5383285ea10SEliot Blennerhassett HPI_PROFILE_GET = HPI_FUNC_ID(PROFILE, 4), 5393285ea10SEliot Blennerhassett HPI_PROFILE_GET_IDLECOUNT = HPI_FUNC_ID(PROFILE, 5), 5403285ea10SEliot Blennerhassett HPI_PROFILE_GET_NAME = HPI_FUNC_ID(PROFILE, 6), 5413285ea10SEliot Blennerhassett HPI_PROFILE_GET_UTILIZATION = HPI_FUNC_ID(PROFILE, 7) 542719f82d3SEliot Blennerhassett #define HPI_PROFILE_FUNCTION_COUNT 7 5433285ea10SEliot Blennerhassett }; 544719f82d3SEliot Blennerhassett 545719f82d3SEliot Blennerhassett /* ////////////////////////////////////////////////////////////////////// */ 546719f82d3SEliot Blennerhassett /* STRUCTURES */ 547719f82d3SEliot Blennerhassett #ifndef DISABLE_PRAGMA_PACK1 548719f82d3SEliot Blennerhassett #pragma pack(push, 1) 549719f82d3SEliot Blennerhassett #endif 550719f82d3SEliot Blennerhassett 551719f82d3SEliot Blennerhassett /** PCI bus resource */ 552719f82d3SEliot Blennerhassett struct hpi_pci { 553719f82d3SEliot Blennerhassett u32 __iomem *ap_mem_base[HPI_MAX_ADAPTER_MEM_SPACES]; 5543285ea10SEliot Blennerhassett struct pci_dev *pci_dev; 555719f82d3SEliot Blennerhassett }; 556719f82d3SEliot Blennerhassett 557719f82d3SEliot Blennerhassett struct hpi_resource { 558719f82d3SEliot Blennerhassett union { 559719f82d3SEliot Blennerhassett const struct hpi_pci *pci; 560719f82d3SEliot Blennerhassett const char *net_if; 561719f82d3SEliot Blennerhassett } r; 562719f82d3SEliot Blennerhassett #ifndef HPI64BIT /* keep structure size constant */ 563719f82d3SEliot Blennerhassett u32 pad_to64; 564719f82d3SEliot Blennerhassett #endif 565719f82d3SEliot Blennerhassett u16 bus_type; /* HPI_BUS_PNPISA, _PCI, _USB etc */ 566719f82d3SEliot Blennerhassett u16 padding; 567719f82d3SEliot Blennerhassett 568719f82d3SEliot Blennerhassett }; 569719f82d3SEliot Blennerhassett 570719f82d3SEliot Blennerhassett /** Format info used inside struct hpi_message 571719f82d3SEliot Blennerhassett Not the same as public API struct hpi_format */ 572719f82d3SEliot Blennerhassett struct hpi_msg_format { 5731d595d2aSEliot Blennerhassett u32 sample_rate; /**< 11025, 32000, 44100 etc. */ 574719f82d3SEliot Blennerhassett u32 bit_rate; /**< for MPEG */ 5751d595d2aSEliot Blennerhassett u32 attributes; /**< stereo/joint_stereo/mono */ 576719f82d3SEliot Blennerhassett u16 channels; /**< 1,2..., (or ancillary mode or idle bit */ 577719f82d3SEliot Blennerhassett u16 format; /**< HPI_FORMAT_PCM16, _MPEG etc. see \ref HPI_FORMATS. */ 578719f82d3SEliot Blennerhassett }; 579719f82d3SEliot Blennerhassett 580719f82d3SEliot Blennerhassett /** Buffer+format structure. 581719f82d3SEliot Blennerhassett Must be kept 7 * 32 bits to match public struct hpi_datastruct */ 582719f82d3SEliot Blennerhassett struct hpi_msg_data { 583719f82d3SEliot Blennerhassett struct hpi_msg_format format; 584719f82d3SEliot Blennerhassett u8 *pb_data; 585719f82d3SEliot Blennerhassett #ifndef HPI64BIT 586719f82d3SEliot Blennerhassett u32 padding; 587719f82d3SEliot Blennerhassett #endif 588719f82d3SEliot Blennerhassett u32 data_size; 589719f82d3SEliot Blennerhassett }; 590719f82d3SEliot Blennerhassett 591719f82d3SEliot Blennerhassett /** struct hpi_datastructure used up to 3.04 driver */ 592719f82d3SEliot Blennerhassett struct hpi_data_legacy32 { 593719f82d3SEliot Blennerhassett struct hpi_format format; 594719f82d3SEliot Blennerhassett u32 pb_data; 595719f82d3SEliot Blennerhassett u32 data_size; 596719f82d3SEliot Blennerhassett }; 597719f82d3SEliot Blennerhassett 598719f82d3SEliot Blennerhassett #ifdef HPI64BIT 599719f82d3SEliot Blennerhassett /* Compatibility version of struct hpi_data*/ 600719f82d3SEliot Blennerhassett struct hpi_data_compat32 { 601719f82d3SEliot Blennerhassett struct hpi_msg_format format; 602719f82d3SEliot Blennerhassett u32 pb_data; 603719f82d3SEliot Blennerhassett u32 padding; 604719f82d3SEliot Blennerhassett u32 data_size; 605719f82d3SEliot Blennerhassett }; 606719f82d3SEliot Blennerhassett #endif 607719f82d3SEliot Blennerhassett 608719f82d3SEliot Blennerhassett struct hpi_buffer { 609938c565aSEliot Blennerhassett /** placeholder for backward compatibility (see dwBufferSize) */ 610719f82d3SEliot Blennerhassett struct hpi_msg_format reserved; 611719f82d3SEliot Blennerhassett u32 command; /**< HPI_BUFFER_CMD_xxx*/ 612719f82d3SEliot Blennerhassett u32 pci_address; /**< PCI physical address of buffer for DSP DMA */ 613719f82d3SEliot Blennerhassett u32 buffer_size; /**< must line up with data_size of HPI_DATA*/ 614719f82d3SEliot Blennerhassett }; 615719f82d3SEliot Blennerhassett 616719f82d3SEliot Blennerhassett /*/////////////////////////////////////////////////////////////////////////// */ 617719f82d3SEliot Blennerhassett /* This is used for background buffer bus mastering stream buffers. */ 618719f82d3SEliot Blennerhassett struct hpi_hostbuffer_status { 619719f82d3SEliot Blennerhassett u32 samples_processed; 620719f82d3SEliot Blennerhassett u32 auxiliary_data_available; 621719f82d3SEliot Blennerhassett u32 stream_state; 622719f82d3SEliot Blennerhassett /* DSP index in to the host bus master buffer. */ 6238e0874eaSEliot Blennerhassett u32 dsp_index; 624719f82d3SEliot Blennerhassett /* Host index in to the host bus master buffer. */ 625719f82d3SEliot Blennerhassett u32 host_index; 626719f82d3SEliot Blennerhassett u32 size_in_bytes; 627719f82d3SEliot Blennerhassett }; 628719f82d3SEliot Blennerhassett 629719f82d3SEliot Blennerhassett struct hpi_streamid { 630719f82d3SEliot Blennerhassett u16 object_type; 631719f82d3SEliot Blennerhassett /**< Type of object, HPI_OBJ_OSTREAM or HPI_OBJ_ISTREAM. */ 632719f82d3SEliot Blennerhassett u16 stream_index; /**< outstream or instream index. */ 633719f82d3SEliot Blennerhassett }; 634719f82d3SEliot Blennerhassett 635719f82d3SEliot Blennerhassett struct hpi_punchinout { 636719f82d3SEliot Blennerhassett u32 punch_in_sample; 637719f82d3SEliot Blennerhassett u32 punch_out_sample; 638719f82d3SEliot Blennerhassett }; 639719f82d3SEliot Blennerhassett 640719f82d3SEliot Blennerhassett struct hpi_subsys_msg { 641719f82d3SEliot Blennerhassett struct hpi_resource resource; 642719f82d3SEliot Blennerhassett }; 643719f82d3SEliot Blennerhassett 644719f82d3SEliot Blennerhassett struct hpi_subsys_res { 645719f82d3SEliot Blennerhassett u32 version; 6462f918a64SEliot Blennerhassett u32 data; /* extended version */ 6472f918a64SEliot Blennerhassett u16 num_adapters; 648719f82d3SEliot Blennerhassett u16 adapter_index; 6492f918a64SEliot Blennerhassett u16 adapter_type; 6502f918a64SEliot Blennerhassett u16 pad16; 651719f82d3SEliot Blennerhassett }; 652719f82d3SEliot Blennerhassett 653719f82d3SEliot Blennerhassett union hpi_adapterx_msg { 654719f82d3SEliot Blennerhassett struct { 6553285ea10SEliot Blennerhassett u32 dsp_address; 6563285ea10SEliot Blennerhassett u32 count_bytes; 6573285ea10SEliot Blennerhassett } debug_read; 658719f82d3SEliot Blennerhassett struct { 6593285ea10SEliot Blennerhassett u32 adapter_mode; 6603285ea10SEliot Blennerhassett u16 query_or_set; 6613285ea10SEliot Blennerhassett } mode; 6623285ea10SEliot Blennerhassett struct { 6633285ea10SEliot Blennerhassett u16 index; 6643285ea10SEliot Blennerhassett } module_info; 665719f82d3SEliot Blennerhassett struct { 666719f82d3SEliot Blennerhassett u16 index; 667719f82d3SEliot Blennerhassett u16 what; 668719f82d3SEliot Blennerhassett u16 property_index; 669719f82d3SEliot Blennerhassett } property_enum; 670719f82d3SEliot Blennerhassett struct { 6713285ea10SEliot Blennerhassett u16 property; 6723285ea10SEliot Blennerhassett u16 parameter1; 6733285ea10SEliot Blennerhassett u16 parameter2; 6743285ea10SEliot Blennerhassett } property_set; 675719f82d3SEliot Blennerhassett struct { 6763285ea10SEliot Blennerhassett u32 pad32; 6773285ea10SEliot Blennerhassett u16 key1; 6783285ea10SEliot Blennerhassett u16 key2; 6793285ea10SEliot Blennerhassett } restart; 6803285ea10SEliot Blennerhassett struct { 6813285ea10SEliot Blennerhassett u32 pad32; 6823285ea10SEliot Blennerhassett u16 value; 6833285ea10SEliot Blennerhassett } test_assert; 684bd33c1caSEliot Blennerhassett struct { 685bd33c1caSEliot Blennerhassett u32 yes; 686bd33c1caSEliot Blennerhassett } irq_query; 687d8aefaefSEliot Blennerhassett u32 pad[3]; 688719f82d3SEliot Blennerhassett }; 689719f82d3SEliot Blennerhassett 690719f82d3SEliot Blennerhassett struct hpi_adapter_res { 691719f82d3SEliot Blennerhassett u32 serial_number; 692719f82d3SEliot Blennerhassett u16 adapter_type; 6933285ea10SEliot Blennerhassett u16 adapter_index; 694719f82d3SEliot Blennerhassett u16 num_instreams; 695719f82d3SEliot Blennerhassett u16 num_outstreams; 696719f82d3SEliot Blennerhassett u16 num_mixers; 697719f82d3SEliot Blennerhassett u16 version; 698719f82d3SEliot Blennerhassett u8 sz_adapter_assert[HPI_STRING_LEN]; 699719f82d3SEliot Blennerhassett }; 700719f82d3SEliot Blennerhassett 701719f82d3SEliot Blennerhassett union hpi_adapterx_res { 7023285ea10SEliot Blennerhassett struct hpi_adapter_res info; 703719f82d3SEliot Blennerhassett struct { 7043285ea10SEliot Blennerhassett u32 p1; 7053285ea10SEliot Blennerhassett u16 count; 7063285ea10SEliot Blennerhassett u16 dsp_index; 7073285ea10SEliot Blennerhassett u32 p2; 7083285ea10SEliot Blennerhassett u32 dsp_msg_addr; 7093285ea10SEliot Blennerhassett char sz_message[HPI_STRING_LEN]; 7103285ea10SEliot Blennerhassett } assert; 7113285ea10SEliot Blennerhassett struct { 7123285ea10SEliot Blennerhassett u32 adapter_mode; 7133285ea10SEliot Blennerhassett } mode; 714719f82d3SEliot Blennerhassett struct { 715719f82d3SEliot Blennerhassett u16 parameter1; 716719f82d3SEliot Blennerhassett u16 parameter2; 717719f82d3SEliot Blennerhassett } property_get; 7183285ea10SEliot Blennerhassett struct { 719bd33c1caSEliot Blennerhassett u32 yes; 720bd33c1caSEliot Blennerhassett } irq_query; 721719f82d3SEliot Blennerhassett }; 722719f82d3SEliot Blennerhassett 723719f82d3SEliot Blennerhassett struct hpi_stream_msg { 724719f82d3SEliot Blennerhassett union { 725719f82d3SEliot Blennerhassett struct hpi_msg_data data; 726719f82d3SEliot Blennerhassett struct hpi_data_legacy32 data32; 727719f82d3SEliot Blennerhassett u16 velocity; 728719f82d3SEliot Blennerhassett struct hpi_punchinout pio; 729719f82d3SEliot Blennerhassett u32 time_scale; 730719f82d3SEliot Blennerhassett struct hpi_buffer buffer; 731719f82d3SEliot Blennerhassett struct hpi_streamid stream; 732bd33c1caSEliot Blennerhassett u32 threshold_bytes; 733719f82d3SEliot Blennerhassett } u; 734719f82d3SEliot Blennerhassett }; 735719f82d3SEliot Blennerhassett 736719f82d3SEliot Blennerhassett struct hpi_stream_res { 737719f82d3SEliot Blennerhassett union { 738719f82d3SEliot Blennerhassett struct { 739719f82d3SEliot Blennerhassett /* size of hardware buffer */ 740719f82d3SEliot Blennerhassett u32 buffer_size; 741719f82d3SEliot Blennerhassett /* OutStream - data to play, 742719f82d3SEliot Blennerhassett InStream - data recorded */ 743719f82d3SEliot Blennerhassett u32 data_available; 744719f82d3SEliot Blennerhassett /* OutStream - samples played, 745719f82d3SEliot Blennerhassett InStream - samples recorded */ 746719f82d3SEliot Blennerhassett u32 samples_transferred; 747719f82d3SEliot Blennerhassett /* Adapter - OutStream - data to play, 748719f82d3SEliot Blennerhassett InStream - data recorded */ 749719f82d3SEliot Blennerhassett u32 auxiliary_data_available; 750719f82d3SEliot Blennerhassett u16 state; /* HPI_STATE_PLAYING, _STATE_STOPPED */ 751719f82d3SEliot Blennerhassett u16 padding; 752719f82d3SEliot Blennerhassett } stream_info; 753719f82d3SEliot Blennerhassett struct { 754719f82d3SEliot Blennerhassett u32 buffer_size; 755719f82d3SEliot Blennerhassett u32 data_available; 756719f82d3SEliot Blennerhassett u32 samples_transfered; 757719f82d3SEliot Blennerhassett u16 state; 758719f82d3SEliot Blennerhassett u16 outstream_index; 759719f82d3SEliot Blennerhassett u16 instream_index; 760719f82d3SEliot Blennerhassett u16 padding; 761719f82d3SEliot Blennerhassett u32 auxiliary_data_available; 762719f82d3SEliot Blennerhassett } legacy_stream_info; 763719f82d3SEliot Blennerhassett struct { 764719f82d3SEliot Blennerhassett /* bitmap of grouped OutStreams */ 765719f82d3SEliot Blennerhassett u32 outstream_group_map; 766719f82d3SEliot Blennerhassett /* bitmap of grouped InStreams */ 767719f82d3SEliot Blennerhassett u32 instream_group_map; 768719f82d3SEliot Blennerhassett } group_info; 769719f82d3SEliot Blennerhassett struct { 770719f82d3SEliot Blennerhassett /* pointer to the buffer */ 771719f82d3SEliot Blennerhassett u8 *p_buffer; 772719f82d3SEliot Blennerhassett /* pointer to the hostbuffer status */ 773719f82d3SEliot Blennerhassett struct hpi_hostbuffer_status *p_status; 774719f82d3SEliot Blennerhassett } hostbuffer_info; 775719f82d3SEliot Blennerhassett } u; 776719f82d3SEliot Blennerhassett }; 777719f82d3SEliot Blennerhassett 778719f82d3SEliot Blennerhassett struct hpi_mixer_msg { 779719f82d3SEliot Blennerhassett u16 control_index; 780719f82d3SEliot Blennerhassett u16 control_type; /* = HPI_CONTROL_METER _VOLUME etc */ 7813285ea10SEliot Blennerhassett u16 padding1; /* Maintain alignment of subsequent fields */ 782719f82d3SEliot Blennerhassett u16 node_type1; /* = HPI_SOURCENODE_LINEIN etc */ 783719f82d3SEliot Blennerhassett u16 node_index1; /* = 0..N */ 784719f82d3SEliot Blennerhassett u16 node_type2; 785719f82d3SEliot Blennerhassett u16 node_index2; 786719f82d3SEliot Blennerhassett u16 padding2; /* round to 4 bytes */ 787719f82d3SEliot Blennerhassett }; 788719f82d3SEliot Blennerhassett 789719f82d3SEliot Blennerhassett struct hpi_mixer_res { 790719f82d3SEliot Blennerhassett u16 src_node_type; /* = HPI_SOURCENODE_LINEIN etc */ 791719f82d3SEliot Blennerhassett u16 src_node_index; /* = 0..N */ 792719f82d3SEliot Blennerhassett u16 dst_node_type; 793719f82d3SEliot Blennerhassett u16 dst_node_index; 794719f82d3SEliot Blennerhassett /* Also controlType for MixerGetControlByIndex */ 795719f82d3SEliot Blennerhassett u16 control_index; 796719f82d3SEliot Blennerhassett /* may indicate which DSP the control is located on */ 797719f82d3SEliot Blennerhassett u16 dsp_index; 798719f82d3SEliot Blennerhassett }; 799719f82d3SEliot Blennerhassett 800719f82d3SEliot Blennerhassett union hpi_mixerx_msg { 801719f82d3SEliot Blennerhassett struct { 802719f82d3SEliot Blennerhassett u16 starting_index; 803719f82d3SEliot Blennerhassett u16 flags; 804719f82d3SEliot Blennerhassett u32 length_in_bytes; /* length in bytes of p_data */ 805719f82d3SEliot Blennerhassett u32 p_data; /* pointer to a data array */ 806719f82d3SEliot Blennerhassett } gcabi; 807719f82d3SEliot Blennerhassett struct { 808719f82d3SEliot Blennerhassett u16 command; 809719f82d3SEliot Blennerhassett u16 index; 810719f82d3SEliot Blennerhassett } store; /* for HPI_MIXER_STORE message */ 811719f82d3SEliot Blennerhassett }; 812719f82d3SEliot Blennerhassett 813719f82d3SEliot Blennerhassett union hpi_mixerx_res { 814719f82d3SEliot Blennerhassett struct { 815719f82d3SEliot Blennerhassett u32 bytes_returned; /* size of items returned */ 816719f82d3SEliot Blennerhassett u32 p_data; /* pointer to data array */ 817719f82d3SEliot Blennerhassett u16 more_to_do; /* indicates if there is more to do */ 818719f82d3SEliot Blennerhassett } gcabi; 819bd33c1caSEliot Blennerhassett struct { 820bd33c1caSEliot Blennerhassett u32 total_controls; /* count of controls in the mixer */ 821bd33c1caSEliot Blennerhassett u32 cache_controls; /* count of controls in the cac */ 822bd33c1caSEliot Blennerhassett u32 cache_bytes; /* size of cache */ 823bd33c1caSEliot Blennerhassett } cache_info; 824719f82d3SEliot Blennerhassett }; 825719f82d3SEliot Blennerhassett 826719f82d3SEliot Blennerhassett struct hpi_control_msg { 827719f82d3SEliot Blennerhassett u16 attribute; /* control attribute or property */ 828719f82d3SEliot Blennerhassett u16 saved_index; 829719f82d3SEliot Blennerhassett u32 param1; /* generic parameter 1 */ 830719f82d3SEliot Blennerhassett u32 param2; /* generic parameter 2 */ 831719f82d3SEliot Blennerhassett short an_log_value[HPI_MAX_CHANNELS]; 832719f82d3SEliot Blennerhassett }; 833719f82d3SEliot Blennerhassett 834719f82d3SEliot Blennerhassett struct hpi_control_union_msg { 835719f82d3SEliot Blennerhassett u16 attribute; /* control attribute or property */ 836719f82d3SEliot Blennerhassett u16 saved_index; /* only used in ctrl save/restore */ 837719f82d3SEliot Blennerhassett union { 838719f82d3SEliot Blennerhassett struct { 839719f82d3SEliot Blennerhassett u32 param1; /* generic parameter 1 */ 840719f82d3SEliot Blennerhassett u32 param2; /* generic parameter 2 */ 841719f82d3SEliot Blennerhassett short an_log_value[HPI_MAX_CHANNELS]; 842719f82d3SEliot Blennerhassett } old; 843719f82d3SEliot Blennerhassett union { 844719f82d3SEliot Blennerhassett u32 frequency; 845719f82d3SEliot Blennerhassett u32 gain; 846719f82d3SEliot Blennerhassett u32 band; 847719f82d3SEliot Blennerhassett u32 deemphasis; 848719f82d3SEliot Blennerhassett u32 program; 849719f82d3SEliot Blennerhassett struct { 850719f82d3SEliot Blennerhassett u32 mode; 851719f82d3SEliot Blennerhassett u32 value; 852719f82d3SEliot Blennerhassett } mode; 8535a498ef1SEliot Blennerhassett u32 blend; 854719f82d3SEliot Blennerhassett } tuner; 855719f82d3SEliot Blennerhassett } u; 856719f82d3SEliot Blennerhassett }; 857719f82d3SEliot Blennerhassett 858719f82d3SEliot Blennerhassett struct hpi_control_res { 859719f82d3SEliot Blennerhassett /* Could make union. dwParam, anLogValue never used in same response */ 860719f82d3SEliot Blennerhassett u32 param1; 861719f82d3SEliot Blennerhassett u32 param2; 862719f82d3SEliot Blennerhassett short an_log_value[HPI_MAX_CHANNELS]; 863719f82d3SEliot Blennerhassett }; 864719f82d3SEliot Blennerhassett 865719f82d3SEliot Blennerhassett union hpi_control_union_res { 866719f82d3SEliot Blennerhassett struct { 867719f82d3SEliot Blennerhassett u32 param1; 868719f82d3SEliot Blennerhassett u32 param2; 869719f82d3SEliot Blennerhassett short an_log_value[HPI_MAX_CHANNELS]; 870719f82d3SEliot Blennerhassett } old; 871719f82d3SEliot Blennerhassett union { 872719f82d3SEliot Blennerhassett u32 band; 873719f82d3SEliot Blennerhassett u32 frequency; 874719f82d3SEliot Blennerhassett u32 gain; 875719f82d3SEliot Blennerhassett u32 deemphasis; 876719f82d3SEliot Blennerhassett struct { 877719f82d3SEliot Blennerhassett u32 data[2]; 878719f82d3SEliot Blennerhassett u32 bLER; 879719f82d3SEliot Blennerhassett } rds; 8803285ea10SEliot Blennerhassett short s_level; 8813285ea10SEliot Blennerhassett struct { 8823285ea10SEliot Blennerhassett u16 value; 8833285ea10SEliot Blennerhassett u16 mask; 8843285ea10SEliot Blennerhassett } status; 885719f82d3SEliot Blennerhassett } tuner; 886719f82d3SEliot Blennerhassett struct { 887719f82d3SEliot Blennerhassett char sz_data[8]; 888719f82d3SEliot Blennerhassett u32 remaining_chars; 889719f82d3SEliot Blennerhassett } chars8; 890719f82d3SEliot Blennerhassett char c_data12[12]; 891719f82d3SEliot Blennerhassett union { 89258fbf77fSEliot Blennerhassett struct { 893719f82d3SEliot Blennerhassett u32 status; 894719f82d3SEliot Blennerhassett u32 readable_size; 895719f82d3SEliot Blennerhassett u32 writeable_size; 89658fbf77fSEliot Blennerhassett } status; 89758fbf77fSEliot Blennerhassett } cobranet; 898719f82d3SEliot Blennerhassett }; 899719f82d3SEliot Blennerhassett 900719f82d3SEliot Blennerhassett struct hpi_nvmemory_msg { 901719f82d3SEliot Blennerhassett u16 address; 902719f82d3SEliot Blennerhassett u16 data; 903719f82d3SEliot Blennerhassett }; 904719f82d3SEliot Blennerhassett 905719f82d3SEliot Blennerhassett struct hpi_nvmemory_res { 906719f82d3SEliot Blennerhassett u16 size_in_bytes; 907719f82d3SEliot Blennerhassett u16 data; 908719f82d3SEliot Blennerhassett }; 909719f82d3SEliot Blennerhassett 910719f82d3SEliot Blennerhassett struct hpi_gpio_msg { 911719f82d3SEliot Blennerhassett u16 bit_index; 912719f82d3SEliot Blennerhassett u16 bit_data; 913719f82d3SEliot Blennerhassett }; 914719f82d3SEliot Blennerhassett 915719f82d3SEliot Blennerhassett struct hpi_gpio_res { 916719f82d3SEliot Blennerhassett u16 number_input_bits; 917719f82d3SEliot Blennerhassett u16 number_output_bits; 918719f82d3SEliot Blennerhassett u16 bit_data[4]; 919719f82d3SEliot Blennerhassett }; 920719f82d3SEliot Blennerhassett 921719f82d3SEliot Blennerhassett struct hpi_async_msg { 922719f82d3SEliot Blennerhassett u32 events; 923719f82d3SEliot Blennerhassett u16 maximum_events; 924719f82d3SEliot Blennerhassett u16 padding; 925719f82d3SEliot Blennerhassett }; 926719f82d3SEliot Blennerhassett 927719f82d3SEliot Blennerhassett struct hpi_async_res { 928719f82d3SEliot Blennerhassett union { 929719f82d3SEliot Blennerhassett struct { 930719f82d3SEliot Blennerhassett u16 count; 931719f82d3SEliot Blennerhassett } count; 932719f82d3SEliot Blennerhassett struct { 933719f82d3SEliot Blennerhassett u32 events; 934719f82d3SEliot Blennerhassett u16 number_returned; 935719f82d3SEliot Blennerhassett u16 padding; 936719f82d3SEliot Blennerhassett } get; 937719f82d3SEliot Blennerhassett struct hpi_async_event event; 938719f82d3SEliot Blennerhassett } u; 939719f82d3SEliot Blennerhassett }; 940719f82d3SEliot Blennerhassett 941719f82d3SEliot Blennerhassett struct hpi_watchdog_msg { 942719f82d3SEliot Blennerhassett u32 time_ms; 943719f82d3SEliot Blennerhassett }; 944719f82d3SEliot Blennerhassett 945719f82d3SEliot Blennerhassett struct hpi_watchdog_res { 946719f82d3SEliot Blennerhassett u32 time_ms; 947719f82d3SEliot Blennerhassett }; 948719f82d3SEliot Blennerhassett 949719f82d3SEliot Blennerhassett struct hpi_clock_msg { 950719f82d3SEliot Blennerhassett u16 hours; 951719f82d3SEliot Blennerhassett u16 minutes; 952719f82d3SEliot Blennerhassett u16 seconds; 953719f82d3SEliot Blennerhassett u16 milli_seconds; 954719f82d3SEliot Blennerhassett }; 955719f82d3SEliot Blennerhassett 956719f82d3SEliot Blennerhassett struct hpi_clock_res { 957719f82d3SEliot Blennerhassett u16 size_in_bytes; 958719f82d3SEliot Blennerhassett u16 hours; 959719f82d3SEliot Blennerhassett u16 minutes; 960719f82d3SEliot Blennerhassett u16 seconds; 961719f82d3SEliot Blennerhassett u16 milli_seconds; 962719f82d3SEliot Blennerhassett u16 padding; 963719f82d3SEliot Blennerhassett }; 964719f82d3SEliot Blennerhassett 965719f82d3SEliot Blennerhassett struct hpi_profile_msg { 966719f82d3SEliot Blennerhassett u16 bin_index; 967719f82d3SEliot Blennerhassett u16 padding; 968719f82d3SEliot Blennerhassett }; 969719f82d3SEliot Blennerhassett 970719f82d3SEliot Blennerhassett struct hpi_profile_res_open { 971719f82d3SEliot Blennerhassett u16 max_profiles; 972719f82d3SEliot Blennerhassett }; 973719f82d3SEliot Blennerhassett 974719f82d3SEliot Blennerhassett struct hpi_profile_res_time { 9753285ea10SEliot Blennerhassett u32 total_tick_count; 976719f82d3SEliot Blennerhassett u32 call_count; 9773285ea10SEliot Blennerhassett u32 max_tick_count; 9783285ea10SEliot Blennerhassett u32 ticks_per_millisecond; 9793285ea10SEliot Blennerhassett u16 profile_interval; 980719f82d3SEliot Blennerhassett }; 981719f82d3SEliot Blennerhassett 982719f82d3SEliot Blennerhassett struct hpi_profile_res_name { 983719f82d3SEliot Blennerhassett u8 sz_name[32]; 984719f82d3SEliot Blennerhassett }; 985719f82d3SEliot Blennerhassett 986719f82d3SEliot Blennerhassett struct hpi_profile_res { 987719f82d3SEliot Blennerhassett union { 988719f82d3SEliot Blennerhassett struct hpi_profile_res_open o; 989719f82d3SEliot Blennerhassett struct hpi_profile_res_time t; 990719f82d3SEliot Blennerhassett struct hpi_profile_res_name n; 991719f82d3SEliot Blennerhassett } u; 992719f82d3SEliot Blennerhassett }; 993719f82d3SEliot Blennerhassett 994719f82d3SEliot Blennerhassett struct hpi_message_header { 995719f82d3SEliot Blennerhassett u16 size; /* total size in bytes */ 996719f82d3SEliot Blennerhassett u8 type; /* HPI_TYPE_MESSAGE */ 997719f82d3SEliot Blennerhassett u8 version; /* message version */ 998719f82d3SEliot Blennerhassett u16 object; /* HPI_OBJ_* */ 999719f82d3SEliot Blennerhassett u16 function; /* HPI_SUBSYS_xxx, HPI_ADAPTER_xxx */ 1000719f82d3SEliot Blennerhassett u16 adapter_index; /* the adapter index */ 1001719f82d3SEliot Blennerhassett u16 obj_index; /* */ 1002719f82d3SEliot Blennerhassett }; 1003719f82d3SEliot Blennerhassett 1004719f82d3SEliot Blennerhassett struct hpi_message { 1005719f82d3SEliot Blennerhassett /* following fields must match HPI_MESSAGE_HEADER */ 1006719f82d3SEliot Blennerhassett u16 size; /* total size in bytes */ 1007719f82d3SEliot Blennerhassett u8 type; /* HPI_TYPE_MESSAGE */ 1008719f82d3SEliot Blennerhassett u8 version; /* message version */ 1009719f82d3SEliot Blennerhassett u16 object; /* HPI_OBJ_* */ 1010719f82d3SEliot Blennerhassett u16 function; /* HPI_SUBSYS_xxx, HPI_ADAPTER_xxx */ 1011719f82d3SEliot Blennerhassett u16 adapter_index; /* the adapter index */ 1012719f82d3SEliot Blennerhassett u16 obj_index; /* */ 1013719f82d3SEliot Blennerhassett union { 1014719f82d3SEliot Blennerhassett struct hpi_subsys_msg s; 1015719f82d3SEliot Blennerhassett union hpi_adapterx_msg ax; 1016719f82d3SEliot Blennerhassett struct hpi_stream_msg d; 1017719f82d3SEliot Blennerhassett struct hpi_mixer_msg m; 1018719f82d3SEliot Blennerhassett union hpi_mixerx_msg mx; /* extended mixer; */ 1019719f82d3SEliot Blennerhassett struct hpi_control_msg c; /* mixer control; */ 1020719f82d3SEliot Blennerhassett /* identical to struct hpi_control_msg, 1021719f82d3SEliot Blennerhassett but field naming is improved */ 1022719f82d3SEliot Blennerhassett struct hpi_control_union_msg cu; 1023719f82d3SEliot Blennerhassett struct hpi_nvmemory_msg n; 1024719f82d3SEliot Blennerhassett struct hpi_gpio_msg l; /* digital i/o */ 1025719f82d3SEliot Blennerhassett struct hpi_watchdog_msg w; 1026719f82d3SEliot Blennerhassett struct hpi_clock_msg t; /* dsp time */ 1027719f82d3SEliot Blennerhassett struct hpi_profile_msg p; 1028719f82d3SEliot Blennerhassett struct hpi_async_msg as; 1029719f82d3SEliot Blennerhassett char fixed_size[32]; 1030719f82d3SEliot Blennerhassett } u; 1031719f82d3SEliot Blennerhassett }; 1032719f82d3SEliot Blennerhassett 1033719f82d3SEliot Blennerhassett #define HPI_MESSAGE_SIZE_BY_OBJECT { \ 10343285ea10SEliot Blennerhassett sizeof(struct hpi_message_header) , /* Default, no object type 0 */ \ 1035719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_subsys_msg),\ 1036719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(union hpi_adapterx_msg),\ 1037719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_stream_msg),\ 1038719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_stream_msg),\ 1039719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_mixer_msg),\ 1040719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) , /* no node message */ \ 1041719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_control_msg),\ 1042719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_nvmemory_msg),\ 1043719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_gpio_msg),\ 1044719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_watchdog_msg),\ 1045719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_clock_msg),\ 1046719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_profile_msg),\ 104758fbf77fSEliot Blennerhassett sizeof(struct hpi_message_header), /* controlx obj removed */ \ 1048719f82d3SEliot Blennerhassett sizeof(struct hpi_message_header) + sizeof(struct hpi_async_msg) \ 1049719f82d3SEliot Blennerhassett } 1050719f82d3SEliot Blennerhassett 10511d595d2aSEliot Blennerhassett /* 10521d595d2aSEliot Blennerhassett Note that the wSpecificError error field should be inspected and potentially 10531d595d2aSEliot Blennerhassett reported whenever HPI_ERROR_DSP_COMMUNICATION or HPI_ERROR_DSP_BOOTLOAD is 10541d595d2aSEliot Blennerhassett returned in wError. 10551d595d2aSEliot Blennerhassett */ 1056719f82d3SEliot Blennerhassett struct hpi_response_header { 1057719f82d3SEliot Blennerhassett u16 size; 1058719f82d3SEliot Blennerhassett u8 type; /* HPI_TYPE_RESPONSE */ 1059719f82d3SEliot Blennerhassett u8 version; /* response version */ 1060719f82d3SEliot Blennerhassett u16 object; /* HPI_OBJ_* */ 1061719f82d3SEliot Blennerhassett u16 function; /* HPI_SUBSYS_xxx, HPI_ADAPTER_xxx */ 1062719f82d3SEliot Blennerhassett u16 error; /* HPI_ERROR_xxx */ 1063719f82d3SEliot Blennerhassett u16 specific_error; /* adapter specific error */ 1064719f82d3SEliot Blennerhassett }; 1065719f82d3SEliot Blennerhassett 1066719f82d3SEliot Blennerhassett struct hpi_response { 1067719f82d3SEliot Blennerhassett /* following fields must match HPI_RESPONSE_HEADER */ 1068719f82d3SEliot Blennerhassett u16 size; 1069719f82d3SEliot Blennerhassett u8 type; /* HPI_TYPE_RESPONSE */ 1070719f82d3SEliot Blennerhassett u8 version; /* response version */ 1071719f82d3SEliot Blennerhassett u16 object; /* HPI_OBJ_* */ 1072719f82d3SEliot Blennerhassett u16 function; /* HPI_SUBSYS_xxx, HPI_ADAPTER_xxx */ 1073719f82d3SEliot Blennerhassett u16 error; /* HPI_ERROR_xxx */ 1074719f82d3SEliot Blennerhassett u16 specific_error; /* adapter specific error */ 1075719f82d3SEliot Blennerhassett union { 1076719f82d3SEliot Blennerhassett struct hpi_subsys_res s; 1077719f82d3SEliot Blennerhassett union hpi_adapterx_res ax; 1078719f82d3SEliot Blennerhassett struct hpi_stream_res d; 1079719f82d3SEliot Blennerhassett struct hpi_mixer_res m; 1080719f82d3SEliot Blennerhassett union hpi_mixerx_res mx; /* extended mixer; */ 1081719f82d3SEliot Blennerhassett struct hpi_control_res c; /* mixer control; */ 1082719f82d3SEliot Blennerhassett /* identical to hpi_control_res, but field naming is improved */ 1083719f82d3SEliot Blennerhassett union hpi_control_union_res cu; 1084719f82d3SEliot Blennerhassett struct hpi_nvmemory_res n; 1085719f82d3SEliot Blennerhassett struct hpi_gpio_res l; /* digital i/o */ 1086719f82d3SEliot Blennerhassett struct hpi_watchdog_res w; 1087719f82d3SEliot Blennerhassett struct hpi_clock_res t; /* dsp time */ 1088719f82d3SEliot Blennerhassett struct hpi_profile_res p; 1089719f82d3SEliot Blennerhassett struct hpi_async_res as; 1090719f82d3SEliot Blennerhassett u8 bytes[52]; 1091719f82d3SEliot Blennerhassett } u; 1092719f82d3SEliot Blennerhassett }; 1093719f82d3SEliot Blennerhassett 1094719f82d3SEliot Blennerhassett #define HPI_RESPONSE_SIZE_BY_OBJECT { \ 10953285ea10SEliot Blennerhassett sizeof(struct hpi_response_header) ,/* Default, no object type 0 */ \ 1096719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_subsys_res),\ 1097719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(union hpi_adapterx_res),\ 1098719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_stream_res),\ 1099719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_stream_res),\ 1100719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_mixer_res),\ 1101719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) , /* no node response */ \ 1102719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_control_res),\ 1103719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_nvmemory_res),\ 1104719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_gpio_res),\ 1105719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_watchdog_res),\ 1106719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_clock_res),\ 1107719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_profile_res),\ 110858fbf77fSEliot Blennerhassett sizeof(struct hpi_response_header), /* controlx obj removed */ \ 1109719f82d3SEliot Blennerhassett sizeof(struct hpi_response_header) + sizeof(struct hpi_async_res) \ 1110719f82d3SEliot Blennerhassett } 1111719f82d3SEliot Blennerhassett 1112ba94455cSEliot Blennerhassett /*********************** version 1 message/response **************************/ 1113719f82d3SEliot Blennerhassett #define HPINET_ETHERNET_DATA_SIZE (1500) 1114719f82d3SEliot Blennerhassett #define HPINET_IP_HDR_SIZE (20) 1115719f82d3SEliot Blennerhassett #define HPINET_IP_DATA_SIZE (HPINET_ETHERNET_DATA_SIZE - HPINET_IP_HDR_SIZE) 1116719f82d3SEliot Blennerhassett #define HPINET_UDP_HDR_SIZE (8) 1117719f82d3SEliot Blennerhassett #define HPINET_UDP_DATA_SIZE (HPINET_IP_DATA_SIZE - HPINET_UDP_HDR_SIZE) 1118719f82d3SEliot Blennerhassett #define HPINET_ASI_HDR_SIZE (2) 1119719f82d3SEliot Blennerhassett #define HPINET_ASI_DATA_SIZE (HPINET_UDP_DATA_SIZE - HPINET_ASI_HDR_SIZE) 1120719f82d3SEliot Blennerhassett 1121719f82d3SEliot Blennerhassett #define HPI_MAX_PAYLOAD_SIZE (HPINET_ASI_DATA_SIZE - 2) 1122719f82d3SEliot Blennerhassett 1123719f82d3SEliot Blennerhassett /* New style message/response, but still V0 compatible */ 1124719f82d3SEliot Blennerhassett struct hpi_msg_adapter_get_info { 1125719f82d3SEliot Blennerhassett struct hpi_message_header h; 1126719f82d3SEliot Blennerhassett }; 1127719f82d3SEliot Blennerhassett 1128719f82d3SEliot Blennerhassett struct hpi_res_adapter_get_info { 1129719f82d3SEliot Blennerhassett struct hpi_response_header h; /*v0 */ 1130719f82d3SEliot Blennerhassett struct hpi_adapter_res p; 1131719f82d3SEliot Blennerhassett }; 1132719f82d3SEliot Blennerhassett 11333285ea10SEliot Blennerhassett struct hpi_res_adapter_debug_read { 11343285ea10SEliot Blennerhassett struct hpi_response_header h; 11353dad06acSEliot Blennerhassett u8 bytes[1024]; 11363285ea10SEliot Blennerhassett }; 11373285ea10SEliot Blennerhassett 113858fbf77fSEliot Blennerhassett struct hpi_msg_cobranet_hmi { 113958fbf77fSEliot Blennerhassett u16 attribute; 114058fbf77fSEliot Blennerhassett u16 padding; 114158fbf77fSEliot Blennerhassett u32 hmi_address; 114258fbf77fSEliot Blennerhassett u32 byte_count; 114358fbf77fSEliot Blennerhassett }; 114458fbf77fSEliot Blennerhassett 114558fbf77fSEliot Blennerhassett struct hpi_msg_cobranet_hmiwrite { 114658fbf77fSEliot Blennerhassett struct hpi_message_header h; 114758fbf77fSEliot Blennerhassett struct hpi_msg_cobranet_hmi p; 114858fbf77fSEliot Blennerhassett u8 bytes[256]; 114958fbf77fSEliot Blennerhassett }; 115058fbf77fSEliot Blennerhassett 115158fbf77fSEliot Blennerhassett struct hpi_msg_cobranet_hmiread { 115258fbf77fSEliot Blennerhassett struct hpi_message_header h; 115358fbf77fSEliot Blennerhassett struct hpi_msg_cobranet_hmi p; 115458fbf77fSEliot Blennerhassett }; 115558fbf77fSEliot Blennerhassett 115658fbf77fSEliot Blennerhassett struct hpi_res_cobranet_hmiread { 115758fbf77fSEliot Blennerhassett struct hpi_response_header h; 115858fbf77fSEliot Blennerhassett u32 byte_count; 115958fbf77fSEliot Blennerhassett u8 bytes[256]; 116058fbf77fSEliot Blennerhassett }; 116158fbf77fSEliot Blennerhassett 1162719f82d3SEliot Blennerhassett #if 1 1163719f82d3SEliot Blennerhassett #define hpi_message_header_v1 hpi_message_header 1164719f82d3SEliot Blennerhassett #define hpi_response_header_v1 hpi_response_header 1165719f82d3SEliot Blennerhassett #else 1166719f82d3SEliot Blennerhassett /* V1 headers in Addition to v0 headers */ 1167719f82d3SEliot Blennerhassett struct hpi_message_header_v1 { 1168719f82d3SEliot Blennerhassett struct hpi_message_header h0; 1169719f82d3SEliot Blennerhassett /* struct { 1170719f82d3SEliot Blennerhassett } h1; */ 1171719f82d3SEliot Blennerhassett }; 1172719f82d3SEliot Blennerhassett 1173719f82d3SEliot Blennerhassett struct hpi_response_header_v1 { 1174719f82d3SEliot Blennerhassett struct hpi_response_header h0; 1175719f82d3SEliot Blennerhassett struct { 1176719f82d3SEliot Blennerhassett u16 adapter_index; /* the adapter index */ 1177719f82d3SEliot Blennerhassett u16 obj_index; /* object index */ 1178719f82d3SEliot Blennerhassett } h1; 1179719f82d3SEliot Blennerhassett }; 1180719f82d3SEliot Blennerhassett #endif 1181719f82d3SEliot Blennerhassett 1182719f82d3SEliot Blennerhassett struct hpi_msg_payload_v0 { 1183719f82d3SEliot Blennerhassett struct hpi_message_header h; 1184719f82d3SEliot Blennerhassett union { 1185719f82d3SEliot Blennerhassett struct hpi_subsys_msg s; 1186719f82d3SEliot Blennerhassett union hpi_adapterx_msg ax; 1187719f82d3SEliot Blennerhassett struct hpi_stream_msg d; 1188719f82d3SEliot Blennerhassett struct hpi_mixer_msg m; 1189719f82d3SEliot Blennerhassett union hpi_mixerx_msg mx; 1190719f82d3SEliot Blennerhassett struct hpi_control_msg c; 1191719f82d3SEliot Blennerhassett struct hpi_control_union_msg cu; 1192719f82d3SEliot Blennerhassett struct hpi_nvmemory_msg n; 1193719f82d3SEliot Blennerhassett struct hpi_gpio_msg l; 1194719f82d3SEliot Blennerhassett struct hpi_watchdog_msg w; 1195719f82d3SEliot Blennerhassett struct hpi_clock_msg t; 1196719f82d3SEliot Blennerhassett struct hpi_profile_msg p; 1197719f82d3SEliot Blennerhassett struct hpi_async_msg as; 1198719f82d3SEliot Blennerhassett } u; 1199719f82d3SEliot Blennerhassett }; 1200719f82d3SEliot Blennerhassett 1201719f82d3SEliot Blennerhassett struct hpi_res_payload_v0 { 1202719f82d3SEliot Blennerhassett struct hpi_response_header h; 1203719f82d3SEliot Blennerhassett union { 1204719f82d3SEliot Blennerhassett struct hpi_subsys_res s; 1205719f82d3SEliot Blennerhassett union hpi_adapterx_res ax; 1206719f82d3SEliot Blennerhassett struct hpi_stream_res d; 1207719f82d3SEliot Blennerhassett struct hpi_mixer_res m; 1208719f82d3SEliot Blennerhassett union hpi_mixerx_res mx; 1209719f82d3SEliot Blennerhassett struct hpi_control_res c; 1210719f82d3SEliot Blennerhassett union hpi_control_union_res cu; 1211719f82d3SEliot Blennerhassett struct hpi_nvmemory_res n; 1212719f82d3SEliot Blennerhassett struct hpi_gpio_res l; 1213719f82d3SEliot Blennerhassett struct hpi_watchdog_res w; 1214719f82d3SEliot Blennerhassett struct hpi_clock_res t; 1215719f82d3SEliot Blennerhassett struct hpi_profile_res p; 1216719f82d3SEliot Blennerhassett struct hpi_async_res as; 1217719f82d3SEliot Blennerhassett } u; 1218719f82d3SEliot Blennerhassett }; 1219719f82d3SEliot Blennerhassett 1220719f82d3SEliot Blennerhassett union hpi_message_buffer_v1 { 1221719f82d3SEliot Blennerhassett struct hpi_message m0; /* version 0 */ 1222719f82d3SEliot Blennerhassett struct hpi_message_header_v1 h; 12233285ea10SEliot Blennerhassett u8 buf[HPI_MAX_PAYLOAD_SIZE]; 1224719f82d3SEliot Blennerhassett }; 1225719f82d3SEliot Blennerhassett 1226719f82d3SEliot Blennerhassett union hpi_response_buffer_v1 { 1227719f82d3SEliot Blennerhassett struct hpi_response r0; /* version 0 */ 1228719f82d3SEliot Blennerhassett struct hpi_response_header_v1 h; 12293285ea10SEliot Blennerhassett u8 buf[HPI_MAX_PAYLOAD_SIZE]; 1230719f82d3SEliot Blennerhassett }; 1231719f82d3SEliot Blennerhassett 1232719f82d3SEliot Blennerhassett compile_time_assert((sizeof(union hpi_message_buffer_v1) <= 1233719f82d3SEliot Blennerhassett HPI_MAX_PAYLOAD_SIZE), message_buffer_ok); 1234719f82d3SEliot Blennerhassett compile_time_assert((sizeof(union hpi_response_buffer_v1) <= 1235719f82d3SEliot Blennerhassett HPI_MAX_PAYLOAD_SIZE), response_buffer_ok); 1236719f82d3SEliot Blennerhassett 1237719f82d3SEliot Blennerhassett /*////////////////////////////////////////////////////////////////////////// */ 1238719f82d3SEliot Blennerhassett /* declarations for compact control calls */ 1239719f82d3SEliot Blennerhassett struct hpi_control_defn { 1240719f82d3SEliot Blennerhassett u8 type; 1241719f82d3SEliot Blennerhassett u8 channels; 1242719f82d3SEliot Blennerhassett u8 src_node_type; 1243719f82d3SEliot Blennerhassett u8 src_node_index; 1244719f82d3SEliot Blennerhassett u8 dest_node_type; 1245719f82d3SEliot Blennerhassett u8 dest_node_index; 1246719f82d3SEliot Blennerhassett }; 1247719f82d3SEliot Blennerhassett 1248719f82d3SEliot Blennerhassett /*////////////////////////////////////////////////////////////////////////// */ 1249719f82d3SEliot Blennerhassett /* declarations for control caching (internal to HPI<->DSP interaction) */ 1250719f82d3SEliot Blennerhassett 12513285ea10SEliot Blennerhassett /** indicates a cached u16 value is invalid. */ 12523285ea10SEliot Blennerhassett #define HPI_CACHE_INVALID_UINT16 0xFFFF 12533285ea10SEliot Blennerhassett /** indicates a cached short value is invalid. */ 12543285ea10SEliot Blennerhassett #define HPI_CACHE_INVALID_SHORT -32768 12553285ea10SEliot Blennerhassett 1256719f82d3SEliot Blennerhassett /** A compact representation of (part of) a controls state. 1257719f82d3SEliot Blennerhassett Used for efficient transfer of the control state 1258719f82d3SEliot Blennerhassett between DSP and host or across a network 1259719f82d3SEliot Blennerhassett */ 1260719f82d3SEliot Blennerhassett struct hpi_control_cache_info { 1261719f82d3SEliot Blennerhassett /** one of HPI_CONTROL_* */ 1262719f82d3SEliot Blennerhassett u8 control_type; 1263719f82d3SEliot Blennerhassett /** The total size of cached information in 32-bit words. */ 1264719f82d3SEliot Blennerhassett u8 size_in32bit_words; 1265719f82d3SEliot Blennerhassett /** The original index of the control on the DSP */ 1266719f82d3SEliot Blennerhassett u16 control_index; 1267719f82d3SEliot Blennerhassett }; 1268719f82d3SEliot Blennerhassett 12693285ea10SEliot Blennerhassett struct hpi_control_cache_vol { 1270719f82d3SEliot Blennerhassett struct hpi_control_cache_info i; 1271108ccb3fSEliot Blennerhassett short an_log[2]; 1272fc3a3990SEliot Blennerhassett unsigned short flags; 1273fc3a3990SEliot Blennerhassett char padding[2]; 12743285ea10SEliot Blennerhassett }; 12753285ea10SEliot Blennerhassett 12763285ea10SEliot Blennerhassett struct hpi_control_cache_meter { 12773285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1278108ccb3fSEliot Blennerhassett short an_log_peak[2]; 1279108ccb3fSEliot Blennerhassett short an_logRMS[2]; 12803285ea10SEliot Blennerhassett }; 12813285ea10SEliot Blennerhassett 12823285ea10SEliot Blennerhassett struct hpi_control_cache_channelmode { 12833285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1284719f82d3SEliot Blennerhassett u16 mode; 12853285ea10SEliot Blennerhassett char temp_padding[6]; 12863285ea10SEliot Blennerhassett }; 12873285ea10SEliot Blennerhassett 12883285ea10SEliot Blennerhassett struct hpi_control_cache_mux { 12893285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1290719f82d3SEliot Blennerhassett u16 source_node_type; 1291719f82d3SEliot Blennerhassett u16 source_node_index; 12923285ea10SEliot Blennerhassett char temp_padding[4]; 12933285ea10SEliot Blennerhassett }; 12943285ea10SEliot Blennerhassett 12953285ea10SEliot Blennerhassett struct hpi_control_cache_level { 12963285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1297108ccb3fSEliot Blennerhassett short an_log[2]; 12983285ea10SEliot Blennerhassett char temp_padding[4]; 12993285ea10SEliot Blennerhassett }; 13003285ea10SEliot Blennerhassett 13013285ea10SEliot Blennerhassett struct hpi_control_cache_tuner { 13023285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1303719f82d3SEliot Blennerhassett u32 freq_ink_hz; 1304719f82d3SEliot Blennerhassett u16 band; 13053285ea10SEliot Blennerhassett short s_level_avg; 13063285ea10SEliot Blennerhassett }; 13073285ea10SEliot Blennerhassett 13083285ea10SEliot Blennerhassett struct hpi_control_cache_aes3rx { 13093285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1310719f82d3SEliot Blennerhassett u32 error_status; 1311719f82d3SEliot Blennerhassett u32 format; 13123285ea10SEliot Blennerhassett }; 13133285ea10SEliot Blennerhassett 13143285ea10SEliot Blennerhassett struct hpi_control_cache_aes3tx { 13153285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 13163285ea10SEliot Blennerhassett u32 format; 13173285ea10SEliot Blennerhassett char temp_padding[4]; 13183285ea10SEliot Blennerhassett }; 13193285ea10SEliot Blennerhassett 13203285ea10SEliot Blennerhassett struct hpi_control_cache_tonedetector { 13213285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1322719f82d3SEliot Blennerhassett u16 state; 13233285ea10SEliot Blennerhassett char temp_padding[6]; 13243285ea10SEliot Blennerhassett }; 13253285ea10SEliot Blennerhassett 13263285ea10SEliot Blennerhassett struct hpi_control_cache_silencedetector { 13273285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1328719f82d3SEliot Blennerhassett u32 state; 13293285ea10SEliot Blennerhassett char temp_padding[4]; 13303285ea10SEliot Blennerhassett }; 13313285ea10SEliot Blennerhassett 13323285ea10SEliot Blennerhassett struct hpi_control_cache_sampleclock { 13333285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 1334719f82d3SEliot Blennerhassett u16 source; 1335719f82d3SEliot Blennerhassett u16 source_index; 1336719f82d3SEliot Blennerhassett u32 sample_rate; 13373285ea10SEliot Blennerhassett }; 13383285ea10SEliot Blennerhassett 13393285ea10SEliot Blennerhassett struct hpi_control_cache_microphone { 13403285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 13413285ea10SEliot Blennerhassett u16 phantom_state; 13423285ea10SEliot Blennerhassett char temp_padding[6]; 13433285ea10SEliot Blennerhassett }; 13443285ea10SEliot Blennerhassett 13453285ea10SEliot Blennerhassett struct hpi_control_cache_single { 13463285ea10SEliot Blennerhassett union { 13473285ea10SEliot Blennerhassett struct hpi_control_cache_info i; 13483285ea10SEliot Blennerhassett struct hpi_control_cache_vol vol; 13493285ea10SEliot Blennerhassett struct hpi_control_cache_meter meter; 13503285ea10SEliot Blennerhassett struct hpi_control_cache_channelmode mode; 13513285ea10SEliot Blennerhassett struct hpi_control_cache_mux mux; 13523285ea10SEliot Blennerhassett struct hpi_control_cache_level level; 13533285ea10SEliot Blennerhassett struct hpi_control_cache_tuner tuner; 13543285ea10SEliot Blennerhassett struct hpi_control_cache_aes3rx aes3rx; 13553285ea10SEliot Blennerhassett struct hpi_control_cache_aes3tx aes3tx; 13563285ea10SEliot Blennerhassett struct hpi_control_cache_tonedetector tone; 13573285ea10SEliot Blennerhassett struct hpi_control_cache_silencedetector silence; 13583285ea10SEliot Blennerhassett struct hpi_control_cache_sampleclock clk; 13593285ea10SEliot Blennerhassett struct hpi_control_cache_microphone microphone; 1360719f82d3SEliot Blennerhassett } u; 1361719f82d3SEliot Blennerhassett }; 1362719f82d3SEliot Blennerhassett 1363719f82d3SEliot Blennerhassett struct hpi_control_cache_pad { 1364719f82d3SEliot Blennerhassett struct hpi_control_cache_info i; 1365719f82d3SEliot Blennerhassett u32 field_valid_flags; 1366719f82d3SEliot Blennerhassett u8 c_channel[8]; 1367719f82d3SEliot Blennerhassett u8 c_artist[40]; 1368719f82d3SEliot Blennerhassett u8 c_title[40]; 1369719f82d3SEliot Blennerhassett u8 c_comment[200]; 1370719f82d3SEliot Blennerhassett u32 pTY; 1371719f82d3SEliot Blennerhassett u32 pI; 1372719f82d3SEliot Blennerhassett u32 traffic_supported; 1373719f82d3SEliot Blennerhassett u32 traffic_anouncement; 1374719f82d3SEliot Blennerhassett }; 1375719f82d3SEliot Blennerhassett 1376ba94455cSEliot Blennerhassett /* 2^N sized FIFO buffer (internal to HPI<->DSP interaction) */ 1377719f82d3SEliot Blennerhassett struct hpi_fifo_buffer { 1378719f82d3SEliot Blennerhassett u32 size; 13798e0874eaSEliot Blennerhassett u32 dsp_index; 1380719f82d3SEliot Blennerhassett u32 host_index; 1381719f82d3SEliot Blennerhassett }; 1382719f82d3SEliot Blennerhassett 1383719f82d3SEliot Blennerhassett #ifndef DISABLE_PRAGMA_PACK1 1384719f82d3SEliot Blennerhassett #pragma pack(pop) 1385719f82d3SEliot Blennerhassett #endif 1386719f82d3SEliot Blennerhassett 1387719f82d3SEliot Blennerhassett /* skip host side function declarations for DSP 1388719f82d3SEliot Blennerhassett compile and documentation extraction */ 1389719f82d3SEliot Blennerhassett 1390719f82d3SEliot Blennerhassett char hpi_handle_object(const u32 handle); 1391719f82d3SEliot Blennerhassett 1392719f82d3SEliot Blennerhassett void hpi_handle_to_indexes(const u32 handle, u16 *pw_adapter_index, 1393719f82d3SEliot Blennerhassett u16 *pw_object_index); 1394719f82d3SEliot Blennerhassett 1395719f82d3SEliot Blennerhassett u32 hpi_indexes_to_handle(const char c_object, const u16 adapter_index, 1396719f82d3SEliot Blennerhassett const u16 object_index); 1397719f82d3SEliot Blennerhassett 1398719f82d3SEliot Blennerhassett /*////////////////////////////////////////////////////////////////////////// */ 1399719f82d3SEliot Blennerhassett 1400719f82d3SEliot Blennerhassett /* main HPI entry point */ 1401ba94455cSEliot Blennerhassett void hpi_send_recv(struct hpi_message *phm, struct hpi_response *phr); 1402719f82d3SEliot Blennerhassett 1403719f82d3SEliot Blennerhassett /* used in PnP OS/driver */ 1404ba94455cSEliot Blennerhassett u16 hpi_subsys_create_adapter(const struct hpi_resource *p_resource, 1405ba94455cSEliot Blennerhassett u16 *pw_adapter_index); 1406719f82d3SEliot Blennerhassett 1407ba94455cSEliot Blennerhassett u16 hpi_outstream_host_buffer_get_info(u32 h_outstream, u8 **pp_buffer, 1408719f82d3SEliot Blennerhassett struct hpi_hostbuffer_status **pp_status); 1409719f82d3SEliot Blennerhassett 1410ba94455cSEliot Blennerhassett u16 hpi_instream_host_buffer_get_info(u32 h_instream, u8 **pp_buffer, 1411719f82d3SEliot Blennerhassett struct hpi_hostbuffer_status **pp_status); 1412719f82d3SEliot Blennerhassett 1413719f82d3SEliot Blennerhassett u16 hpi_adapter_restart(u16 adapter_index); 1414719f82d3SEliot Blennerhassett 1415719f82d3SEliot Blennerhassett /* 1416719f82d3SEliot Blennerhassett The following 3 functions were last declared in header files for 1417719f82d3SEliot Blennerhassett driver 3.10. HPI_ControlQuery() used to be the recommended way 1418719f82d3SEliot Blennerhassett of getting a volume range. Declared here for binary asihpi32.dll 1419719f82d3SEliot Blennerhassett compatibility. 1420719f82d3SEliot Blennerhassett */ 1421719f82d3SEliot Blennerhassett 1422719f82d3SEliot Blennerhassett void hpi_format_to_msg(struct hpi_msg_format *pMF, 1423719f82d3SEliot Blennerhassett const struct hpi_format *pF); 1424719f82d3SEliot Blennerhassett void hpi_stream_response_to_legacy(struct hpi_stream_res *pSR); 1425719f82d3SEliot Blennerhassett 1426719f82d3SEliot Blennerhassett /*////////////////////////////////////////////////////////////////////////// */ 1427719f82d3SEliot Blennerhassett /* declarations for individual HPI entry points */ 1428719f82d3SEliot Blennerhassett hpi_handler_func HPI_6000; 1429719f82d3SEliot Blennerhassett hpi_handler_func HPI_6205; 1430719f82d3SEliot Blennerhassett 1431719f82d3SEliot Blennerhassett #endif /* _HPI_INTERNAL_H_ */ 1432