Revert "hikey960: Remove hifi dsp support."

This reverts commit 1d7e5889cd761a9eaecb130c52582d2b0707a08d.

Reason for revert: previous commit broke build_test target, b/219798815

Change-Id: If678459053b79b81de27a1b7d514cc0c6101d97d
diff --git a/hifi/xaf/hifi-dpf/app/xa-factory.c b/hifi/xaf/hifi-dpf/app/xa-factory.c
new file mode 100644
index 0000000..b9e7d19
--- /dev/null
+++ b/hifi/xaf/hifi-dpf/app/xa-factory.c
@@ -0,0 +1,163 @@
+/*******************************************************************************
+* Copyright (C) 2018 Cadence Design Systems, Inc.
+* 
+* Permission is hereby granted, free of charge, to any person obtaining
+* a copy of this software and associated documentation files (the
+* "Software"), to use this Software with Cadence processor cores only and 
+* not with any other processors and platforms, subject to
+* the following conditions:
+* 
+* The above copyright notice and this permission notice shall be included
+* in all copies or substantial portions of the Software.
+* 
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+******************************************************************************/
+
+/*******************************************************************************
+ * xa-factory.c
+ *
+ * DSP processing framework core - component factory
+ *
+ ******************************************************************************/
+
+#define MODULE_TAG                      FACTORY
+
+/*******************************************************************************
+ * Includes
+ ******************************************************************************/
+
+#include "xf.h"
+#include "audio/xa_type_def.h"
+
+/*******************************************************************************
+ * Tracing tags
+ ******************************************************************************/
+
+/* ...general initialization sequence */
+TRACE_TAG(INIT, 1);
+
+/*******************************************************************************
+ * Local types definitions
+ ******************************************************************************/
+
+/* ...component descriptor */
+typedef struct xf_component_id
+{
+    /* ...class id (string identifier) */
+    const char         *id;
+    
+    /* ...class constructor */
+    xf_component_t *  (*factory)(u32 core, xa_codec_func_t process);
+
+    /* ...component API function */
+    xa_codec_func_t    *process;
+
+}   xf_component_id_t;
+
+/*******************************************************************************
+ * External functions
+ ******************************************************************************/
+
+/* ...components API functions */
+extern XA_ERRORCODE xa_pcm_codec(xa_codec_handle_t, WORD32, WORD32, pVOID);
+extern XA_ERRORCODE xa_mp3_decoder(xa_codec_handle_t, WORD32, WORD32, pVOID);
+extern XA_ERRORCODE xa_aac_decoder(xa_codec_handle_t, WORD32, WORD32, pVOID);
+extern XA_ERRORCODE xa_aac_encoder(xa_codec_handle_t, WORD32, WORD32, pVOID);
+extern XA_ERRORCODE xa_vorbis_decoder(xa_codec_handle_t, WORD32, WORD32, pVOID);
+extern XA_ERRORCODE xa_ac3_decoder(xa_codec_handle_t, WORD32, WORD32, pVOID);
+extern XA_ERRORCODE xa_ddplus71_decoder(xa_codec_handle_t, WORD32, WORD32, pVOID);
+extern XA_ERRORCODE xa_mixer(xa_codec_handle_t, WORD32, WORD32, pVOID);
+extern XA_ERRORCODE xa_renderer(xa_codec_handle_t, WORD32, WORD32, pVOID);
+extern XA_ERRORCODE xa_capturer(xa_codec_handle_t, WORD32, WORD32, pVOID);
+extern XA_ERRORCODE xa_src_pp_fx(xa_codec_handle_t, WORD32, WORD32, pVOID);
+extern XA_ERRORCODE xa_dts_hd_decoder(xa_codec_handle_t, WORD32, WORD32, pVOID);
+extern XA_ERRORCODE xa_dap_fx(xa_codec_handle_t, WORD32, WORD32, pVOID);
+
+/* ...component class factories */
+extern xf_component_t * xa_audio_codec_factory(u32 core, xa_codec_func_t process);
+extern xf_component_t * xa_audio_fx_factory(u32 core, xa_codec_func_t process);
+extern xf_component_t * xa_mixer_factory(u32 core, xa_codec_func_t process);
+extern xf_component_t * xa_renderer_factory(u32 core,xa_codec_func_t process);
+
+/*******************************************************************************
+ * Local constants definitions
+ ******************************************************************************/
+    
+/* ...component class id */
+static const xf_component_id_t xf_component_id[] = 
+{
+#if XA_PCM
+    { "audio-decoder/pcm",      xa_audio_codec_factory,     xa_pcm_codec },
+#endif
+#if XA_MP3_DECODER
+    { "audio-decoder/mp3",      xa_audio_codec_factory,     xa_mp3_decoder },
+#endif
+#if XA_AAC_DECODER
+    { "audio-decoder/aac",      xa_audio_codec_factory,     xa_aac_decoder },
+#endif
+#if XA_AC3_DECODER
+    { "audio-decoder/ac3",      xa_audio_codec_factory,     xa_ac3_decoder },
+#endif
+#if XA_DDP71_DECODER
+    { "audio-decoder/ddplus71", xa_audio_codec_factory,     xa_ddplus71_decoder },
+#endif
+#if XA_DTS_HD_DECODER
+    { "audio-decoder/dts-hd",   xa_audio_codec_factory,     xa_dts_hd_decoder },
+#endif
+#if XA_VORBIS_DECODER
+    { "audio-decoder/vorbis",   xa_audio_codec_factory,     xa_vorbis_decoder },
+#endif
+#if XA_AAC_ENCODER
+    { "audio-encoder/aac",      xa_audio_codec_factory,     xa_aac_encoder },
+#endif
+#if XA_SRC_PP_FX
+    { "audio-fx/src-pp",        xa_audio_codec_factory,     xa_src_pp_fx },
+#endif
+#if XA_DAP_FX
+    { "audio-fx/dap",           xa_audio_codec_factory,     xa_dap_fx },
+#endif
+#if XA_MIXER
+    { "mixer",                  xa_mixer_factory,           xa_mixer },
+#endif
+#if XA_RENDERER
+    { "renderer",               xa_renderer_factory,        xa_renderer },
+#endif
+#if XA_CAPTURER
+    { "capturer",               xa_capturer_factory,        xa_capturer },
+#endif
+};
+
+/* ...number of items in the map */
+#define XF_COMPONENT_ID_MAX     (sizeof(xf_component_id) / sizeof(xf_component_id[0]))
+   
+/*******************************************************************************
+ * Enry points
+ ******************************************************************************/
+
+xf_component_t * xf_component_factory(u32 core, xf_id_t id, u32 length)
+{
+    u32     i;
+
+    /* ...find component-id in static map */
+    for (i = 0; i < XF_COMPONENT_ID_MAX; i++)
+    {
+        /* ...symbolic search - not too good; would prefer GUIDs in some form */
+        if (!strncmp(id, xf_component_id[i].id, length))
+        {
+            /* ...pass control to specific class factory */
+            return xf_component_id[i].factory(core, xf_component_id[i].process);
+        }
+    }
+
+    /* ...component string id is not recognized */
+    TRACE(ERROR, _b("Unknown component type: %s"), id);
+
+    return NULL;
+}