/hosted-xaf

Cadence Xtensa Audio Framework - Hosted

Primary LanguageCOtherNOASSERTION

#
# Copyright (c) 2015-2023 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 deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, 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.
#

======================================================================
Xtensa Audio Framework (XAF) - Hosted solution
======================================================================

======================================================================
Revision History
======================================================================

Version Hosted 1.0 API 3.3 : November 17, 2023

+ GA Release

+ Built and tested with RI.9 tools

+ [TENA-3231] FreeRTOS: updated commit ID which fixes tick-timer 
  update issue (2ca806e59d8eb2490726f2ce1460f256ab593cf3).

+ [TENA-4141] Testbench: Runtime disconnect-without-delete commands
  are now processed on a separate thread.

+ [TENA-4150] Mixer class change to fix a corner case by reordering 
  input over and set input bytes API calls with related plugin 
  changes.

+ [TENA-4151] memset xf_g_dsp structure pointer to avoid fsanitize
  warning.

+ [TENA-4152] Restrict Hosted IPC kernel driver to communicate with
  only one application. 

+ [TENA-4154] Testbench: Increased get_status_cid array size to fix 
  array overflow error.

+ [TENA-4156] Added NULL check in xaf_adev_set_priorities API call for
  adev pointer.

+ [TENA-4158] Plugin: Compile fix in opus-decoder for shared memory
   macro MEM_START_DATA

+ NOTES:
  1. Hosted XAF tests require a XTSC subsystem to compile and
  run, so they would not compile and run OOB. Refer to Programmer's
  guide for steps to:
    - Build the subsystem,
    - Build and run Hosted XAF tests with the built subsystem.
  2. Only tested for subsystems with 1 Host + up to 8 HiFi DSPs.
  3. Any reference to 'hostless' in the package source files can 
  be ignored as the package is for hosted-XAF solution.
  4. Limited testing is done with 64-bit version of Host OS.

+ KNOWN LIMITATIONS:
  1. Package is available in TGZ format only.
  2. The following features are not supported on 64-bit version of
  Host Linux OS:
     - Zero copy mode of xaf_comp_get_config_ext API
     - Zero copy mode of xaf_comp_set_config_ext API
  3. Multiple memory pool feature is only supported for 
  XAF_MEM_ID_COMP to XAF_MEM_ID_COMP_FAST type of memory amongst 
  enum XAF_MEM_ID.
  4. MCPS, Memory numbers printed correspond to DSP which does not 
  include Host side info.
  5. IPC shared-memory between host IPC-kernel and main DSP is 
  uncached.

----------------------------------------------------------------------

Version 0.9_Beta API 3.3 : August 18, 2023

+ Hosted XAF

+ Beta Release

+ Built and tested with RI.9 tools.

+ [TENA-3231] FreeRTOS timer interrupt issue is resolved and github
  commit id is updated. This fix enables execution of
  capturer/renderer based testbenches.

+ [TENA-3887] Changes in class-audio-codec and class-mixer to support
  execution with partial input data.  

+ [TENA-3970] FLUSH/INVALIDATE macro cleanup and consolidation done
  in XAF library.

+ [TENA-4112] Free-up temporary output buffer if xaf_comp_delete is
  called before component was initialized (class-audio-codec).

+ Enabled hosted execution with one host and multiple DSP cores.

+ Enabled two-way handshake between host IPC and DSP-IPC for initial
  sync.
 
+ Ensured re-initialization of queues and indexes in Linux kernel
  driver.

+ Added a mem_pool_type check in xf-mem.h for robustness.

+ Enabled xaf_set_config_ext and xaf_get_config_ext API support with
  zero-copy and non-zero copy mode in 32-bit version of Host OS. 

+ Made improvements in DSP-DSP synchronization mechanism by adding a
  non-pattern store change before reset-sync procedure which uses 
  handshake with a fixed pattern.

+ Fix for a corner case DSP local memset which was affected by 
  Host-DSP interrupt, as interrupt-handler used a local memory 
  resource which was being memset, causing a freertos test to hang,
  hence avoided the meset of this COMP_ID pool, to be done at the
  component appropriately.

+ Changes to enable memory usage and MCPS prints after execution
  for NCORES>1.

+ Reduced the memory delay values from 100 to 1 in XTSC simulation 
  command in cosim_launcher2.py file.

+ Added xaf-config-user.h for user configurable parameters such as 
  specifying the shared memory address. Made necessary changes in
  hifi-dpf and xf_kernel_driver to use shared memory address from
  xaf-config-user.h.

+ Fixed a pointer issue in xaf_get_mem_stats API in xaf-api.c causing
  a segfault in 64-bit version of Host OS.

+ Testbench changes:
  1. Changes to support multi-core build.
  2. Runtime command line parsing changes for NCORES>1 in the
  testbenches that support command line parsing.
  3. Updated initialization logic for AAC testbench to fix a corner
  case. 
  4. Corrected version prints during execution.

+ Plugin changes:
  1. Necessary changes in mixer to support execution with partial
  input data.

+ NOTES:
  1. Hosted XAF tests require a XTSC subsystem to compile and
  run, so they would not compile and run OOB. Refer to Programmer's
  guide for steps to:
    - Build the subsystem,
    - Build and run Hosted XAF tests with the built subsystem.
  2. Only tested for subsystems with 1 Host + up to 6 HiFi DSPs.
  3. Any reference to 'hostless' in the package source files can 
  be ignored as the package is for hosted-XAF solution.
  4. Limited testing is done with 64-bit version of Host OS.
  5. Not tested with L32EX core config variants.

+ KNOWN LIMITATIONS:
  1. Package is available in TGZ format only.
  2. The following features are not supported on 64-bit version of
  Host Linux OS:
     - Zero copy mode of xaf_comp_get_config_ext API
     - Zero copy mode of xaf_comp_set_config_ext API
  3. Multiple memory pool feature is only supported for 
  XAF_MEM_ID_COMP to XAF_MEM_ID_COMP_FAST type of memory amongst 
  enum XAF_MEM_ID.
  4. MCPS, Memory numbers printed correspond to DSP which does not 
  include Host side info.
  5. IPC shared-memory between host IPC-kernel and main DSP is 
  uncached.

----------------------------------------------------------------------

Version 0.5_Alpha API 3.2 : April 14, 2023

+ Hosted XAF

+ Alpha Release

+ Built and tested with RI.9 tools

+ Programmers Guide not updated

+ The DSP Interface Layer is physically separated from the App
  Interface Layer. The IPC abstractions consists of Linux kernel-IPC
  at the host-AP that communicates with the HiFi DSP-IPC using 
  interrupts and shared-memory.

+ algo
  1. Added xf-fio.c in host-apf/src and support files in
  host-apf/include/sys/fio for application-to-kernel-IPC interface.
  2. Modified xaf_get_mem_stats API to provide execution cycle info,
  for MCPS calculation with the stream-duration info available at the 
  application.

+ build 
  1. Separated DSP binary build with required plugin support to 
  compile with Xtensa-Tools, plugin objects are linked to DSP binary.
  2. Host-AP application binary compiles with gcc/gnu tools and the
  plugin libraries are absent here.

+ test
  1. Added xaf-dsp-test.c for DSP binary to run under XTSC.

+ IPC
  1. Added xf_kernel_driver directory with source (xf-proxy.c) and 
  support files on the host-AP.
  2. XTSC environment is used to execute DSP, LUA script interacting 
  via shared-memory and interrupt with linux-kernel-IPC layer

+ DOC:
  HiFi-AF-Hosted-UserGuide.pdf contains steps and notes to use the
  TGZ package.

+ NOTES:
  1. Hosted XAF tests require a XTSC subsystem to compile and
  run, so they would not compile and run OOB. Refer to the user guide
  for steps to:
    - Build the subsystem,
    - Build and run Hosted XAF tests with the built subsystem.
  2. Only tested for a subsystem with 1 Host + 1 HiFi DSP
  3. Any reference to 'hostless' in the package source files can 
  be ignored as the package is for hosted-XAF solution.
  4. Multicore XAF v3.5 GA release is the reference codebase. Hosted 
  XAF differs in IPC interfaces and application build segregation.

+ KNOWN LIMITATIONS:
  1. Tested with XOS and Cache disabled.
  2. DSP execution with FreeRTOS may not work as expected or hang for
  applications that have Capturer and Renderer class of components
  due to timer interrupts not getting generated by FreeRTOS library.
  Limited testing is done with FreeRTOS.
  3. Inconsistent cycle count is observed with XOS of RI-2022.9
  Xtensa Tool chain which may lead to negative MCPS being logged.
  4. Package is available in TGZ format only.
  5. The following features are not supported:
     - xaf_comp_get_config_ext API
     - xaf_comp_set_config_ext API
     - multiple memory-pools

----------------------------------------------------------------------

Version 3.5 API 3.2 : December 20, 2022

+ GA Release

+ Built and tested with RI.9 tools

+ [TENA-3271] Added compiler option '-ffunction-sections', linker 
  option '-Wl,-gc-sections' in library and testbench makefiles.

+ [TENA-3457]: Added short description comments for relevant
  macros/defines used in testbench and plugins.

+ [TENA-3622] Robustness fixes, added attribute align changes to 
  packed structures with xf_msg_id_dtype, increased alignment for an
  internal memory allocation ('Memory used by Framework' in test 
  application) for xaf_comp_t structure type.

+ [TENA-3681] The following miscellaneous updates are done:
  1. Adjusted index of component memory in xaf_get_mem_stats to be
  common to both NCORES=1 and NCORES>1 builds.
  2. Added default init value for framework_local_buffer_size.
  3. Removed unused macro XAF_SHMEM_STRUCT_SIZE from xaf-api.h.
  4. Removed unused variable dsp_frmwk_buf_size_peak from
  xaf_perf_stats_s structure.
  5. Renamed dsp_xaf_buf_size_peak to
  dsp_framework_local_buf_size_peak in struct xaf_perf_stats_s.
  6. Added COMP_FAST and DEV_FAST memory pool for input and output
  of mixer component.

+ [TENA-3689] Replaced strstr with strncmpr for component-type
  matching.

+ [TENA-3690] Updated macro handling of force close on fatal error
  in the testbench to wait for the completed, aborted threads to join
  before returning from main thread gracefully.

+ [TENA-3694] Corrected testbench argument parsing logic to return
  error if unsupported commands are provided in command-line.

+ [TENA-3702] Fixed a bug to allocate sufficient memory for DSP 
  side internal structure by using sizeof() instead of a fixed size. 
  Also added range checks for ID_DEV and ID_COMP memory pools and 
  the number of pools limited to a maximum of 8 each.
  Note: This is not limitation of XAF library and is added to 
  prevent errors at test-application.

+ [TENA-3704] Fixed warnings observed with the compiler flags
  '-Wimplicit-int-conversion', '-Wunused-macros', '-Wsign-compare'
  and "-Wshadow" in XAF library.

+ [TENA-3712] Removed redundant exit code prints in thread join
  messages from all testbenches.

+ [TENA-3713] Resolved subsystem import error due to tools version
  mismatch in XWS package.

+ [FREERTOS] Updated to latest commit id on github that includes a
  bug fix (0909de2bd46fbb9d9f7297e09c17186275dc446c).

+ Compile out option for the component classes (undefined by default):
  XA_DISABLE_CLASS_AUDIO_CODEC, XA_DISABLE_CLASS_CAPTURER,
  XA_DISABLE_CLASS_MIXER, XA_DISABLE_CLASS_MIMO_PROC,
  XA_DISABLE_CLASS_RENDERER.

+ Testbench:
  1. Increased a memory size (AUDIO_COMP_FAST_BUF_SIZE) to support 
  more testcases.
  2. Added framework memory usage print for XAF_MEM_ID_DEV_FAST pool.

+ NOTES:
  1. The release package can build and execute the single-core 
  XAF-hostless tests OOB.
  2. Multicore XAF tests require a multicore-subsystem to compile and
  run, so they would not compile and run OOB. Refer Programmer's Guide
  for steps to:
    - Build multicore-subsystem,
    - Build and run multicore XAF tests with built subsystem.
  3. Tested for a subsystem with a maximum of 8 Cores.

+ KNOWN LIMITATIONS:
  1. XTSC supports simulation of up to a maximum of 16 cores.
  2. With FreeRTOS, the renderer component, if created on a 
  worker-DSP, may not execute leading to pipeline hang, due to 
  timer-interrupts not generated by FreeRTOS library.
  3. Inconsistent cycle count is observed on XOS with RI-2022.9
  Xtensa tool chain which can lead to logging negative MCPS.

----------------------------------------------------------------------

Version 3.4_Alpha API 3.2 : September 16, 2022

+ Alpha release 
+ Built and tested with RI.6 tools
+ Programmers Guide not updated

+ Scratch memory alignment changed from 8 to 16 bytes.

+ [J3278] Added support for non-component(ID_DEV) memory allocation 
  from different memory-pools.
  Default mem_pool_types for edge component input/output buffers
  XAF_MEM_POOL_TYPE_COMP_APP_INPUT, XAF_MEM_POOL_TYPE_COMP_APP_OUTPUT
  is XAF_MEM_ID_DEV; others are of of type XAF_MEM_ID_COMP.

  Notes: In the enum list of XAF_MEM_ID: XAF_MEM_ID_DEV, 
  XAF_MEM_ID_DEV_MAX, XAF_MEM_ID_COMP, XAF_MEM_ID_COMP_MAX and 
  XAF_MEM_ID_MAX are necessary. Additional pools can be inserted 
  between the above values (ex: XAF_MEM_ID_DEV_FAST between
  XAF_MEM_ID_DEV and XAF_MEM_ID_DEV_MAX with XAF_MEM_ID_DEV_MAX being
  the largest of ID_DEV type, similarly for ID_COMP)
  Probe buffer pool type is same as that of output buffer to
  application (XAF_MEM_POOL_TYPE_COMP_APP_OUTPUT).

+ Testbench:
  Modified xaf-playback-usecase-test.c to show example usage of 
  XAF_MEM_ID_DEV_FAST memory pool set using mem_pool_type variable in
  xaf_comp_config_t structure.
  Removed the example of setting it with xaf_comp_set_config().

+ API:
  1. Following are added in xaf-api.h:
    -enum XAF_COMP_MEM_TYPE for component buffers and application
    input/output buffers
    -enum XAF_MEM_ID: XAF_MEM_ID_DEV_FAST, XAF_MEM_ID_DEV_MAX
  2. Following are removed from xaf-api.h:
    -xaf_adev_config_t: pshmem_frmwk
    This pointer is same as paudio_framework_buffer after removal of 
    mem_malloc/mem_free references from library.
    -xaf_comp_config_param: XAF_COMP_CONFIG_PARAM_MEM_POOL_TYPE
    not required since mem_pool_type is passed via xaf_comp_config_t
    -enum XAF_MEM_POOL_MASK_COMP
    not required since mem_pool_type is passed via xaf_comp_config_t
  3. Following are changed in xaf-api.h:
    + xaf_adev_config_t: 
    audio_framework_buffer_size as an array of length XAF_MEM_ID_MAX.
    paudio_framework_buffer as an array of length XAF_MEM_ID_MAX.

+ xf_shared:
  Increased the size of global shared memory buffer, passed as 
  paudio_framework_buffer pointers to the library from application.

+ NOTES:
  1. The release package can build and execute the single-core 
  XAF-hostless tests OOB.
  2. Multicore XAF tests require a multicore-subsystem to compile and
  run, so they would not compile and run OOB. Refer Programmer's Guide
  for steps to:
    - Build multicore-subsystem,
    - Build and run multicore XAF tests with built subsystem.
  3. Tested for a subsystem with a maximum of 8 Cores.

+ KNOWN LIMITATIONS:
  1. XTSC supports simulation of up to a maximum of 16 cores.
  2. With FreeRTOS, the renderer component, if created on a 
  worker-DSP, may not execute leading to pipeline hang, due to 
  timer-interrupts not generated by FreeRTOS library.

----------------------------------------------------------------------

Version 3.3_Alpha API 3.1 : August 31, 2022

+ Alpha release 
+ Built and tested with RI.6 tools
+ Programmers Guide not updated

+ [J3278] Added support for component memory allocation from
  different memory-pools. A component's input, output, persistent and
  scratch memory can be set to be allocated from required memory-pool
  (with xaf_comp_set_config, parameter id 
  XAF_COMP_CONFIG_PARAM_MEM_POOL_TYPE and values from XAF_MEM_ID 
  shifted with appropriately according to XAF_MEM_POOL_MASK_COMP).

+ Modified xaf-playback-usecase-test.c to show example usage of 
  XAF_MEM_ID_COMP_FAST memory pool set with xaf_comp_set_config().

+ Following enums are added to xaf-api.h:
  XAF_MEM_POOL_MASK_COMP

+ Following enums are updated in xaf-api.h:
  1. XAF_MEM_ID
    added additional memory type: XAF_MEM_ID_COMP_FAST
    added max mem-pool markers XAF_MEM_ID_DEV_MAX, XAF_MEM_ID_COMP_MAX
  2. xaf_comp_config_param
    added XAF_COMP_CONFIG_PARAM_MEM_POOL_TYPE

+ Following structures are updated in xaf-api.h:
  1. xaf_adev_config_t: Converted the following parameters to array
    audio_component_buffer_size: component memory size
  2. xaf_adev_config_t: Added the following parameters
    paudio_component_buffer[XAF_MEM_ID_MAX]; (component mem pointer)
    framework_local_buffer_size; (App i/f layer internal-use mem size)
    pframework_local_buffer; (App i/f layer internal-use mem pointer)
    proxy_thread_stack_size;
    dsp_thread_stack_size;
    worker_thread_stack_size[XAF_MAX_WORKER_THREADS];
  3. xaf_adev_config_t: Removed the following parameters
    xaf_mem_malloc_fxn_t *pmem_malloc;
    xaf_mem_free_fxn_t *pmem_free;
  4. xaf_perf_stats_s: Converted the following parameters to array
    dsp_comp_buf_size_peak[XAF_MEM_ID_MAX]: peak component mem usage

+ Following definition is added in xaf-api.h:
  XF_CFG_MAX_COMPS: Maximum number of components in the subsystem
  (default 16). 
  NOTE: Part of "Local Memory used by Framework" or meminfo[2] can 
  vary depending on this parameter by ~1408 bytes (XOS) or ~896 bytes
  (FreeRTOS). For 1 component, the minimum size of 
  frmwk_local_buffer_size is 24576 bytes (XOS), 4096 bytes(FreeRTOS).

+ Following types are removed from xaf-api.h
  xaf_mem_malloc_fxn_t;
  xaf_mem_free_fxn_t;

+ Removed mem_malloc, mem_free function calls from library.
  Test application to provide appropriate size and pointer of each
  memory type available in XAF_MEM_ID enum of xaf-api.h

+ Following file is moved:
  algo/hifi-dpf/src/xf-msgq1.c -> algo/host-apf/src/xf-msgq1.c 

+ Fixed "Local Memory used by Framework" or meminfo[2] where two 
  internal structures were added twice.

+ Added the following from v2.10p1 release
  1. Added support for configurable stack size for DSP worker-threads.
    NOTE: DSP worker-thread stack size should be more than the minimum 
    size required by the OS + maximum size required among all the 
    components on the thread (Default stack size for thread is 8KB).
  2. Fixed buffer leakage issue of mimo-component with 0-output ports.
  3. Fixed important Coverity warnings.
  4. [J3497] Initialized error field of flush message to 0. Similarly,
    added message error field reset for event between components and 
    component connect buffers.
  5. Added changes to allow connect without initialization of source
    component, hence support for decoder to be connected to the next 
    component without feeding input to the decoder.
  6. Fixed renderer callback issue. In renderer-class, output ready 
    state is cleared only if the component has produced output.
  7. Plugin fixes: 
    Added changes to support restarting PCM-Split(mimo-12) component.
  8. FreeRTOS
    version upgrade from v10.2.1-xaf to 10.4.4-stable
    commit-ID: 1d9ea9fe58eadcdee62f1f068857052740eb8a34
    (https://github.com/foss-xtensa/amazon-freertos)
 
+ NOTES:
  1. The release package can build and execute the single-core 
  XAF-hostless tests OOB.
  2. Multicore XAF tests require a multicore-subsystem to compile and
  run, so they would not compile and run OOB. Refer Programmer's Guide
  for steps to:
    - Build multicore-subsystem,
    - Build and run multicore XAF tests with built subsystem.
  3. Tested for a subsystem with a maximum of 8 Cores.

+ KNOWN LIMITATIONS:
  1. XTSC supports simulation of up to a maximum of 16 cores.
  2. With FreeRTOS, the renderer component, if created on a 
  worker-DSP, may not execute leading to pipeline hang, due to 
  timer-interrupts not generated by FreeRTOS library.

----------------------------------------------------------------------

Version 3.2 API 3.0 : May 16, 2022

+ GA Release

+ Built with RI.6 tools

+ Compiled with xt-clang compiler

+ [J3184, J3284, J3273] Added time-out for IPC reset sync to avoid 
  subsystem  hang on synchronization failure if adev_open/dsp_open 
  fail on any core.

+ [J3196] Robustness fix to save temporary output buffer size (
  XAF_DECODER components), to be used during buffer free.
        
+ [J3202] Return fatal-error if XAF_COMP_CONFIG_PARAM_PRIORITY 
  set-config is attempted without creating worker threads (API
  xaf_adev_set_priorities is not called).
        
+ [J3247] Added range checks for number of cores configured in the 
  subsystem. In xaf-pcm-gain-test.c, fix to pass XF_CORE_ID as 0 
  for NCORES=1.

+ [J3279] Pointer alignment fix for objects of structure xf_dsp_t, 
  xf_shmem_data_t (runtime errors of -fsanitize=undefined build).
                  
+ [J3294] Return error if probe is enabled on an input port 
  configured to work in input-bypass mode.

+ Plugin changes:
  [J3235] Renderer: Allow plugin to consume partial input if input 
  is over.

  [J3241] PCM-split: Reset input-over state for input ports if the 
  component is re-started.

  - Opus-decoder: Update the sample rate and num channels values 
  from the decoded stream info for correctness of get-config values.

+ xf_shared changes
  [J3226, J3258, J3261] Increased size of shared-memory XF_SHMEM_SIZE 
  to support testing for more cores.

+ Testbench changes:
  [J3332, J3227, J3228, J3256, J3203] Corrected MCPS calculation in 
  all testbenches, removed 'Gross Total MCPS' print. Total MCPS value
  includes DSP MCPS and XAF MCPS of all the DSPs.

  [J3203, J3236] Full Duplex Opus: added command option for raw-
  stream input to decoder; Fix to check init status after declaring
  input-over; Support for NUM_COMPS_IN_GRAPH=1 (encoder or decoder).

  [J3257] Capturer-pcm-gain testbench: default value of sample-end
  if "-samples:" is not provided as command line argument is set to 0.

  - Removed debug print or multiple stream param prints.

  - Fix return values on error to -1 in all testbenches.

  - Added notes in help text updates in few testbenches.

+ Miscellaneous changes:
  [J3237] Made vecselect=1 in .xtsys,  Staticvector=1 in .yml to 
  avoid subsystem build warnings

  [J3251] updated readme_tflm.txt for clarity

  [J3272] Updated makefiles to support NCORES=1 build from shell env.

  [J3252] url prefix changed to https:// in getFreeRTOS.sh, getTFLM.sh
 
+ NOTES:
  1. The release package can build and execute the single-core 
  XAF-hostless tests OOB.
  2. Multicore XAF tests require a multicore-subsystem to compile and
  run, so they would not compile and run OOB. Refer Programmer's Guide
  for steps to:
    - Build multicore-subsystem,
    - Build and run multicore XAF tests with built subsystem.
  3. Tested for a subsystem with a maximum of 8 Cores.

+ KNOWN LIMITATIONS:
  1. XTSC supports simulation of upto a maximum of 16 cores.
  2. With FreeRTOS, the renderer component, if created on a 
  worker-DSP, may not execute leading to pipeline hang, due to 
  timer-interrupts not generated by FreeRTOS library.

----------------------------------------------------------------------

Version 3.1_Beta API 3.0 : February 28, 2022

+ Beta release 
+ Built and tested with RI.6 tools and xt-clang compiler
+ Programmers Guide in draft format

[J3117] Fixed a buffer leakage issue on MIMO components with 0-output 
  ports.

+ Changes to have a common code-base which supports both XAF-hostless
  and Multicore XAF solutions.

+ Extended multicore support upto 256 cores(8 bits of message-ID)

+ Following structures are updated:
  1. xaf_adev_config_t: Added following parameters
  cb_compute_cycles: call-back function to collect execution cycles
  of worker DSPs.
  cb_stats: shared object pointer passed to the call-back function
  above.

+ Following shared structure is added in xaf-api.h:
  xaf_perf_stats_s: consists of shared memory and execution cycle 
  variables for each worker DSP.

+ Following defines are renamed in xaf-api.h
  INT_NUMBER to XA_EXTERNAL_INTERRUPT_NUMBER

+ Robustness Fixes:
  Core: 
  1. Corrected core to core die message reply to be enqueued to 
     appropriate message pool. Also decrement "dst" variable only if
     the opcode is XF_STOP. 
  2. Added DSP-worker thread cycle measurement hooks to collect the 
     stats before the threads are deleted.
  3. Take out IPC_FLUSH of payload from xf_ipc_send2() and place it 
     outside the IPC layer, just before calling xf_ipc_send2().
  4. Added invalidation after flush in msg_submit where the start-
     buffer is dispatched to other cores from master-core.
  
  Rbtree:
  1. Added proper cache invalidations, removed redundant ones.

  IPC:
  1. Interrupt is disabled on xf_ipc_close().
  2. Added support for level triggered interrupt.
  3. Added support for global mutex locks using L32EX/S32EX
     instructions when XCHAL_HAVE_EXCLUSIVE is set which is mutually
     exclusive to the other type of instruction S32C1I.
  4. Changed the lock in the global shared ipc-structure from object
     to pointer type and it is initialized with the lock object during
     xf_ipc_open().
  5. Converted the XF_EXTERNAL_INTERRUPT_NUMBER for further use in the
     library to XA_PROC_INTERRUPT_NUMBER.

  Base-class:
  1. While dynamically changing the priority of a component, sending 
     all messages meant for that component from its current priority 
     queue to newer priority queue.
  2. Instead of accessing event buffer content to check for error 
     code, now error code is made available as part of the message's
     error field for error event channels.

  Audio-codec class:
  1. Moved response of start buffer below deletion of temporary output
     buffer required for initialization.

  Proxy-MSGQ:
  1. Added fix for 2nd synchronous command issued(set-config) before
     the 1st one (unroute) completes as unroute may wait until next 
     component responds on the output buffer.

  API: 
  1. Added core=XF_CORE_ID_MASTER in xaf_comp_config_default_init
  2. Updated "xf_close()" and "xf_pool_free()" to return error and 
     updated return values of the caller of these functions.
  3. Setting comp_state to XAF_COMP_RESET, after comp_delete attempt
     in xaf_adev_close with XAF_ADEV_FORCE_CLOSE flag.
  4. Added changes in xaf_adev_config structure for passing separate
     shared memory pointers for framework buffers and dsp shared 
     buffers.
  5. Changed XF_CFG_CODEC_SCRATCHMEM_SIZE to 
     worker_thread_scratch_size[0] for validating audio_comp_buf_size.

  Plugins:
  1. src-pp: Added the required RUNTIME_INIT for run-time scratch-
     pointer change to take effect in the src-pp library.
  2. renderer: Added check if component state is RUNNING, before 
     calling xf_timer_stop() during component delete(cleanup).

+ NOTES:
  1. The release packages can build and execute the single-core 
     XAF-hostless tests OOB.
  2. Multicore XAF tests require a multicore-subsystem to compile and
     run, so they would not compile and run OOB. Refer document
     doc/How-To-Guide-for-Multicore-XAF-Package.pdf for steps to:
     build multicore-subsystem,
     build and run multicore XAF tests with built subsystem.

+ KNOWN LIMITATIONS:
  1. XTSC supports simulation of upto a maximum of 16 cores.

----------------------------------------------------------------------

Version 2.10 API 2.1 : November 24, 2021

+ GA Release

+ Built with RI.6 tools

+ Compiled with xt-clang compiler


+ [J3058] In AEC23 plugin, added changes to return non-fatal error if
  both input ports have 0 length input data. Also non-fatal error is
  returned during execution if the output buffer is NULL.

+ [J3066] Added checks to prevent the input buffer fill level from
  going negative in xf_input_port_consume function if input-port 
  bypass is enabled and a corresponding CRITICAL trace print. 
  This could happen if the component plugin incorrectly reports 
  consumed bytes to be greater than the input bytes. 

+ [J3070] Corrected components' default priority calculation logic to
  ensure that the default priority remains the highest priority among
  the DSP worker threads.

+ [J3077] Modified TIMEBASE_FREQ value to support 1 to 16 channels;
  1,2,3 or 4 bytes per PCM-sample and commonly used sample rates 
  between 4000 to 192000 Hz. Also made changes in prepare_runtime 
  function of all the classes to support 8 bits per PCM-sample.

+ Compiler warning fixes:
  Fixed two "comparison of integers of different signs" warnings
  observed with -Wextra build option in xf-proxy.c.

+ Testbench changes:
  Corrected the argument type of comp_cycles passed to
  compute_comp_mcps function from 'int' to 'long long'.

----------------------------------------------------------------------

Version 2.9_Beta API 2.1 : September 24, 2021

+ Built with RI.6 tools

+ Compiled with xt-clang compiler

+ Programmers Guide not updated


+ [J2564] Reverted workaround code change to address XOS thread
  abort issue, since the the fix is available in newer tools version
  (RI.6 and above).

+ [J2928] Extended set/get config APIs are also enabled for MIMO, Mixer
  and Renderer classes.

+ [J2970] Added changes for graceful handling of fatal errors from 
  message processing function xf_core_process_message().

+ [J2982] Corrected a condition check in "xf_worker_queue_purge" 
  function.

+ [J3023] Fix to avoid scheduling of components after a fatal error
  has occured.

+ [J3025] Fixed validation of frame_size to be multiple of
  codec->sample_size by using the input-buffer length (PCM) instead
  of the output buffer length for encoder components.

+ [J3028] Added checks to avoid NULL pointer access after component 
  deletion in the local message submit logic(same thread components).

+ Optimization changes:
  Optimized memory usage by removing base_cancel_pool related code 
  when preemption is active and decentralized scheduling is used.

+ Robustness fixes:
  1. Replaced XF_CHK_ERR with condition check and to print appropriate
  trace message with WARNING tag instead of ERROR tag in the function
  xa_base_event_handler().
  2. Corrected return value if the component's scheduled processing 
  occurs when it is in terminate state (all classes).
  3. Corrected a trace print in xf_mm_alloc().
  4. Fixed component state check in xaf_comp_get_status() API to
  return the correct status to the application if the component delete
  was already initiated.
 
+ Plugin changes:
  1. Renamed opus encoder plugin directory from "opus" to "opus_enc".
  2. Corrected mimo plugins' input and output buffer NULL check 
  error values.

+ Testbench changes:
  1. The following new testbench is added:
     - xaf-full-duplex-opus-test.c (Opus Full Duplex Pipeline).
  2. The following testbeches are no longer packed:
     - xaf-full-duplex-test.c
     - xaf-aac-dec-test.c
     - xaf-src-test.c
     - xaf-vorbis-dec-test.c
     - xaf-opus-enc-test.c
     - xaf-opus-dec-test.c
  3. Added 2 more MCPS prints after testbench execution
  XAF MCPS and Total MCPS (DSP Component MCPS + Framework MCPS).
  4. Fixed memory corruption in xa_app_receive_events_cb() due to
  write event array index exceeding maximum value.

+ Packaging changes:
  Added support for the following multiple testbench project in xws
  package which can be built and run out-of-the-box(15 test projects)
     - testxa_af_hostless 
     - testxa_af_mimo_mix 
     - testxa_af_gain_renderer 
     - testxa_af_capturer_gain 
     - testxa_af_renderer_ref_port 
     - testxa_af_dec* 
     - testxa_af_dec_mix* 
     - testxa_af_amr_wb_dec* 
     - testxa_af_mp3_dec_rend*
     - testxa_af_capturer_mp3_enc* 
     - testxa_af_playback_usecase* 
     - testxa_af_full_duplex_opus* 
     - testxa_af_tflm_microspeech* 
     - testxa_af_tflm_pd*
     - testxa_af_tflm_microspeech_pd*
  The test projects with(*) require dependent libraries, header files
  and Additional Liker path to be provided.

+ Notes:
  1. xaf_comp_set_config_ext and xaf_comp_get_config_ext API usage is
  now demonstrated in the functions opus_dec_setup() and
  get_opus_dec_config() of the newly added Opus Full Duplex testbench
  (xaf-full-duplex-opus-test.c).
  2. testxa_af_hostless project has common test_inp and test_out 
  directory hosting input and output files of all the test projects in 
  the package. Hence user must import this project into the workspace.
  3. For testxa_af_full_duplex_opus, xa_opus_codec.a of only one of 
  the opus_enc or opus_dec plugin needs to be provided for linking.

----------------------------------------------------------------------

Version 2.8_Alpha API 2.1 : August 11, 2021

+ Built with RI.6 tools

+ Programmers Guide not updated


+ [J2893] xaf_format_t type used by the application is moved from 
  xaf-api.h to xaf-utils-test.h.

+ [J2908] Fixed critical Coverity scan errors in xaf library, PCM-Gain
  plugin and FreeRTOS.

+ [J2914] Enabled support for decoder initialization without input.

+ [J2928] Added support for extended get-config and set-config to
  support more than 4 bytes of data per config parameter.

+ [J2942] Added support for input port bypass to avoid data copy at
  input ports from connect buffers to input buffer of components.

+ [J2943] Added per-worker-thread de-centralized scheduler and 
  message queue for MCPS reduction.

+ [J2952] Corrected component ID of SRC component from 
  "audio-fx/src-pp" to "post-proc/src-pp".

+ [J2957] Corrected output buffer length adjustment in mimo-class and
  mixer class fill-this-buffer functions.

+ [J2973] Reverted flexi-lock optimizations around sync-msg-queues
  to ensure sync-msg-queues always have locked access. 

+ [J2977] Enabled propagation of non-fatal error codes for synchronous
  APIs through response message.

+ [J2979] Enabled CRITICAL trace prints with minimal increase in code
  size (~2%).

+ [J2982] Fixed a memory corruption issue by responding to pending
  worker queue messages during component deletion.

+ [J2985] Fixed potential buffer corruption due to concurrent
  auxiliary buffer access.

+ [J2999] Added changes to avoid relax-schedule check for output port
  readiness of MIMO components during initialization.

+ Added following new APIs:
  1. xaf_comp_set_config_ext(pVOID comp_ptr, WORD32 num_param, 
  WORD32 *p_param);
  Note: This API is not a replacement for existing API used for
  component setup(xaf_comp_set_config) and it should not be used
  until component setup is done.

  2. xaf_comp_get_config_ext(pVOID comp_ptr, WORD32 num_param, 
  WORD32 *p_param);

+ Plugin changes:
  1. Consumed bytes variable to consider any partial bytes less than
  sample_size. This change is done in PCM-Gain, Mimo-mix, PCM-Split
  and Mixer component plugins.
  2. Updated Mixer plugin to avoid memset on the input buffer if 
  filled partially.

+ Robustness fixes:
  1. Added component state check after xf_response_get() in
  xaf_comp_get_status() API call. This prevents any buffer access 
  after the component gets deleted.
  2. Corrected a condition check for xf_client_lookup() in
  dsp_worker_entry().

+ Notes:
  1. Input-port-bypass is activated if the plugin reports its input
  buffer size as zero when queried with XA_API_CMD_GET_MEM_INFO_SIZE.
  A usage is demonstarted in the plugin PCM-Gain(xa-pcm-gain.c) under 
  the disabled compile time option XA_INPORT_BYPASS_TEST.
  2. xaf_comp_set_config_ext and xaf_comp_get_config_ext API usage is
  demonstrated in the functions get_opus_dec_config() and 
  opus_dec_setup() of Opus decoder testbench(xaf-opus-dec-test.c)
  and support a maximum of 8 configuation parameters per API call.
  3. Usage of decoder component intialization without input data is
  shown in the AMR decoder testbench(xaf-amr-wb-dec-test.c).

----------------------------------------------------------------------

Version 3.0_Alpha API 3.0 : July 16, 2021

+ Alpha release 
+ Built and tested with RI.2 tools
+ Sanity tested with RI.6 tools
+ Programmers Guide not updated

+ Added multicore support in XAF so that DSP workload can be shared
  among DSPs (2, 3 or 4) by creating components on respective DSPs.

+ Following existing APIs are updated:
  1. adev_set_priority: to pass the following additional argument
     core: corei-ID on which worker threads are to be created.
  2. xaf_get_mem_stats: to pass the following additional argument
     core: core-ID whose memory usage is required

+ Following new APIs are added:
  1. xaf_dsp_open(VOID **, xaf_adev_config_t *)
	 creates the dsp-thread on the worker-core, returns the
	 worker-core handle.
  2. xaf_dsp_close(VOID *)
     closes the dsp-thread on worker core, frees memory.

+ Following structures are updated:
  1. xaf_adev_config_t: Added following parameters
     core: Master-DSP core-ID
     pshmem: pointer to the shared memory used for inter-core IPC
     audio_shmem_buffer_size: size of the shared memory
  2. xaf_comp_config_t: Added following parameter
     core: core-ID on which the component needs to be created

+ Following new defines are added in xaf-api.h:
  1. XF_CFG_CORES_NUM: Number of cores in the system (2,3 or 4)
  2. XF_CORE_ID_MASTER: core-ID of the master-DSP.
  3. INT_NUMBER: IPC interrupt number
     (BInterrupt/ProcInterrupt in xtsc/*.yml file)

+ Following new files are added for inter-core shared memory:
	 xf_shared/src/xf-shared.c 
     xf_shared/include/xf-shared.h

+ Following new file is added for inter-core mutex and interrupts:
	 include/sysdeps/mc_ipc/xf-mc-ipc.h
     
+ Following new files are added for inter-core IPC definition:
  (Note, these files are internal to XAF and listed here for info)
	 algo/hifi-dpf/include/sys/xos-msgq/xf-ipc-if.h
     algo/hifi-dpf/src/xf-ipc-if.c

+ NOTES:
  1. Multicore XAF tests require a multicore-subsystem to compile and
     run, so they would not compile and run OOB.
  2. See doc/How-To-Guide-for-Multicore-XAF-tgz-Package.pdf for steps
     to build multicore-subsystem (2, 3 or 4 cores).
  3. See doc/How-To-Guide-for-Multicore-XAF-tgz-Package.pdf for steps
     to build and run multicore  XAF tests with built subsystem.

+ KNOWN LIMITATIONS:
  1. Inter-core mutex definition uses Xtensa S32C1I (conditional
     store) instruction. The definition should be updated if this 
     instruction is not available or better definition is available. 
  2. Memory and MCPS numbers: The numbers may not be accurate as the 
     shared memory and worker-core stats are not updated.
  3. FreeRTOS: Some test cases may hang when runtime commands, resume 
	 or disconnect are used in execution.
  4. To ensure all worker cores are up before master core starts 
     sending commands, application delays start of master core as a
     workaround. Proper sync mechanism will be added in next release.
  5. Single-core support: The package is not tested for single core 
     build and execution.
  6. Package: Available in TGZ format, no XWS format is available.

----------------------------------------------------------------------

Version 2.7_Alpha API 2.0 : May 28, 2021

+ Alpha Release
+ Built with RI.6 tools, xt-clang compiler
+ Programmers Guide not updated

+ Added support for TensorFlow Lite For Micro (TFLM) inference
  networks to be added as components in XAF.
  
+ Added following two XAF components to demonstrate TFLM support 
  - Microspeech Yes-No Recognizer
  - Person Detect 

+ Added following three XAF applications to demonstrate TFLM support
  - Microspeech Yes-No Recognizer Application
  - Person Detect Application
  - Simultaneous Microspeech and Person Detect Application

+ Note: TFLM code or libraries are not included in the package.
  Please refer to $libxa_af_hostless/build/readme_tflm.txt for details
  on how to download and build TFLM code, and TFLM XAF applications.

+ Note: The XAF TFLM support is built and tested with:
  https://github.com/tensorflow/tensorflow/commit/a1acddcf3f990332b5f0bd19faba1d6e256787f0
  
----------------------------------------------------------------------

Version 2.6 API 2.0 : March 31, 2021

+ GA Release
+ Built with RI.2 tools

+ [J2877] Fixed potential memory overwrite bug by returning UWORD32
  instead of UWORD64 during get-config for capturer and renderer
  component plugins.

+ [J2806] Fixed the rollback logic to avoid memory corruption when
  event channel creation fails.

+ [J2804] Fixed the rollback logic during port routing to prevent
  propagation of already freed buffers.

+ [J2799] Reduced maximum number of event buffers per channel from
  1024 to 16.

+ [J2746] Renderer plugin state changed to IDLE when execution is
  complete. 
   
----------------------------------------------------------------------
Version 2.5_Beta API 2.0 : January 08, 2021

+ Beta release 
+ Built with RI.2 tools
+ Programmers Guide not updated

+ [J2714] Schedule-tree bug fixes for deleting a node which is not
  present on the schedule-tree and for adding a node which is already
  present on the schedule-tree

+ [J2662] Compulsory flush message propagation when triggered due to
  natural EOS in execution, even if the port is IDLE.

+ [J2624] In Opus encoder plugin, corrected bytes consumed calculation
  for multi-channel inputs.

+ [J2617] Corrected the calling order of functions in all the classes,
  xf_output_port_flush_done and xf_output_port_unroute_done to enable
  correct state update (uses XOR operation to toggle states).

+ [J2611] Corrected duplicate bit-masks for two of the component 
  states in mimo-proc class (XA_OUT_TRACK_FLAG_FLUSHING_DONE and 
  XA_MIMO_FLAG_PROBE_SETUP)

+ [J2601] Added -mcoproc compiler option to all source file 
  compilation of library that are not associated with ISR.

+ [J2600] -Wextra warnings: Removed warnings other than 
  'unused variable' for library

+ [J2592] Added check for maximum alignment value in xf_mem_alloc() 

+ Robustness Fixes:
  - Core: 
  1. Introduced component lookup after dequeue of message from worker 
  queue, and reply with appropriate response if the lookup fails.
  When component lookup fails, prevent internally generated UNREGISTER 
  message by responding  with an internal response_failure message.
  2. Components are assigned the highest-worker-thread priority when 
  created until the set-config-parameter stage where the priority is
  reverted to that of either the background-thread or the configured 
  priority(XAF_COMP_CONFIG_PARAM_PRIORITY)
  3. Disabled code related to unused queue "cd->response".

  - IO:
  1. Added state check XF_INPUT_FLAG_PURGING for xf_input_port_ready
  and XF_OUTPUT_FLAG_FLUSHING for xf_output_port_ready.
  2. Disabled premature input-port state change from XF_INPUT_FLAG_EOS
  to XF_INPUT_FLAG_DONE in xf_input_port_put.

  - Base-class:
  1. Updated base-cancel mechanism based on the schedule-tree fixes.
  When preemption is enabled, base_cancel attempts to remove the node
  from schedule-tree, failing which the node is enqueued
  into base_cancel queue, which is dropped from processing when a 
  matching node is dequeued from the worker->queue.
  2. Corrected the variable in scratch size assertion/check to that 
  of the worker_thread_scratch_size in base_postinit.

  - Audio-codec class: 
  1. Flush: if there is a flush on input port, and the flush completes
  immediately, then update the base->state to COMPLETED if the output
  port is unrouted.
  2. Probe_pause: probe_stop should complete flushing the probe port 
  without checking if base->state is COMPLETED.
  3. Fill_this_buffer: check xf_output_port_ready before scheduling 
  as the port may be in unrouting or flushing state.

  - Mimo-proc class: 
  1. Terminate: Remove the assert of output port number check
  2. Unroute: on unroute, update output port state to unrouted and 
  indicate disconnect to plugin early.
  3. Fill_this_buffer: check if the port is unrouting before changing 
  the output port state to routed and indicate connect to plugin.
  4. Cleanup: avoid setting the state unroute_done which is redundant 
  at this point.
  5. Route: check if the ports are ready before scheduling
  6. unroute_done() to be called after the flag
  XA_OUT_TRACK_FLAG_FLUSHING_DONE is set, to make sure all flags are
  cleared after unroute completes.
  7. Fix for handling EMPTY_THIS_BUFFER when in terminate: avoid
  calculating output index of a port for any buffer arriving on
  input port.
  8. Output port flag XA_OUT_TRACK_FLAG_FLUSHING_DONE is cleared when
  output is produced.

  - All classes:
  1. Removed assert check for COMPLETED state in fill_this_buffer().
  2. Delayed response to UNREGISTER command from application until
  the component completes flushing and freeing of memory.
  3. Handling of lookup-failure messages to prevent self-destruction 
  of the component.

  - API: 
  1. Fixed a range check error in xaf_adev_set_priorities().

  - Plugins:
  1. Capturer: Avoid assert on NULL output buffer(output buffer is 
  optional and plugin needs to take appropriate action if NULL).

+ Event communication features:
  1. Event communication to application using event channels
  2. Fatal and non-fatal error reporting to application (as event)
  using event channel per component
  3. Event communication from one component to another
  4. Self-scheduling support for components from plugins

+ API changes:
  1. xaf_adev_open(pVOID *pp_adev, WORD32 audio_frmwk_buf_size, 
  WORD32 audio_comp_buf_size, xaf_mem_malloc_fxn_t mem_malloc, 
  xaf_mem_free_fxn_t mem_free)
  -> xaf_adev_open(pVOID *pp_adev, xaf_adev_config_t *pconfig)
  The old API is retained as xaf_adev_open_deprecated()
  New xaf_adev_open() supports configurable scratch memory size (per 
  worker thread), dsp-thread-priority and proxy-thread-priority, 
  callback function pointer for events
  Older xaf_adev_open API is available as xaf_adev_open_deprecated 

  2. xaf_comp_create(pVOID adev_ptr, pVOID *pp_comp, xf_id_t comp_id,
  UWORD32 ninbuf, UWORD32 noutbuf, pVOID pp_inbuf[], 
  xaf_comp_type comp_type)
  -> xaf_comp_create(pVOID p_adev, pVOID *pp_comp, 
  xaf_comp_config_t *pconfig)
  The old API is retained as xaf_comp_create_deprecated()
  New xaf_comp_create() supports configurable enabling of fatal-error
  reporting(as an event)
  Older xaf_comp_create API is available as xaf_comp_create_deprecated

  3. Added new APIs for event communication:
     xaf_create_event_channel
     xaf_delete_event_channel

  4. Added new APIs to initialize default configuration parameters 
     xaf_adev_config_default_init
     xaf_comp_config_default_init

+ App Interface Layer changes:
  1. Added a thread-safe mechanism for component chain access
  2. Optimized comp_state to only necessary states RESET and CREATE
  3. Delayed the component state update in comp_create until component 
  is created

+ DSP Interface Layer changes:
  1. Added BUG asserts for possible hang-case detection in
  xf_mm_alloc/xf_mm_free, enabled with DEBUG=1 build option.

+ Plugin Changes:
  1. Added XA_<component>_CONFIG_PARAM_FRAME_SIZE_IN_SAMPLES 
  configuration parameter for consistency of frame_size setting 
  in samples-per-channel.
  Components updated: PCM_GAIN, MIXER, OPUS_ENC, CAPTURER, RENDERER
  The older counterparts XA_<component>_CONFIG_PARAM_FRAME_SIZE,
  will be removed in future.
  2. Updated plugins xa-pcm-gain.c, xa-mimo-mix.c to demonstrate
  event communication between components.

+ Testbench Changes
  1. Testbench changes to demonstrate event communication between
  components: xaf-mimo-mix-test.c
  2. Testbench changes to demonstrate error reporting to application:
  xaf-playback-usecase-test.c
  3. Corrected  help text in gain-renderer testbench.

+ MCPS reduction changes:
  1. A buffer can be submitted by a component to the destination 
  worker-queue by directly calling dispatch, thus avoiding enqueue 
  and dequeue of DSP-thread queue.
  2. base_cancel to check the presence of schedule-node in worker 
  queue to avoid spurious scheduling.
  3. Sync msgq access with disable/restore of interrupts instead of
  RTOS' mutex locks.
  4. Added port readiness check for input port in mimo class
  fill_this_buffer() to avoid excess scheduling.
  5. Added a generic lock wrapper as xf-flx-lock-if.h (flexi-lock)
  The locks are initialized as dummy by default. With pre-emption
  enabled, when worker threads are created, the scheduler, shmem and
  component-memory locks are reinitialized to RTOS-mutex-locks and
  xf_sync_enqueue/dequeue locks are reinitialized to interrupt
  disable/restore type of access.

+ Code size reduction changes:
  Following optional (not used by default) compile time switches are 
  provided:
  1. XA_DISABLE_EVENT: To disable event-communication related code 
  2. XA_DISABLE_DEPRECATED_API:  To disable deprecated API code

----------------------------------------------------------------------
Version 2.3 API 1.3 : July 24, 2020

+ GA release 
+ Built with RI.2 tools

+ [J2593] Added support for following two config params in Opus
  encoder plugin:
    - XA_OPUS_ENC_CONFIG_PARAM_SIGNAL_TYPE
    - XA_OPUS_ENC_CONFIG_PARAM_RESET_STATE

+ [J2592] Fixed XAF internal memory allocator to use alignment 
  parameter appropriately

+ [J2586, J2587] Fixed argument to xos_start_system_timer() API
  to select a timer with highest interrupt-priority <= EXCMLEVEL

+ [J2576, J2577] Fixed memory leaks by deleting the timer object in 
  capturer and renderer plugins

+ [J2567] Updated audio-codec-class to reset base state when an 
  output buffer is received after execution completion

+ Renamed pcm_mix component plugin to mimo_mix

----------------------------------------------------------------------
Version 2.2_Beta API 1.3 : May 21, 2020

+ Beta release 
+ Built with RI.2 tools
+ Programmers Guide not updated

+ [J2220] Hostless XAF is tested and supported on Fusion cores

+ [J2226, J2464] Unified Hostless XAF release packages across cores

+ [J2543] Fixed a bug by clearing output_setup flag on relaxed output 
  ports during postprocess in MIMO class

+ [J2544] Added reset EOS stream flags in Opus Encoder, PCM Gain, 
  SRC plugin files to enable re-run upon receiving new input

+ [J2545] PCM Gain plugin updated to support 8, 24, 32 bit PCM width
  and multichannel input data

+ [J2546] Fixed a bug in scratch allocation with pre-emptive 
  scheduling - allocated independent scratch for each worker thread

+ [J2553] Fixed a bug in MIMO class postprocess to avoid re-schedule
  if execution is complete

+ [J2561] Updated XF_TIMEBASE_FREQ to support 48kHz, 16ch, 32bit PCM
  configuration

+ [J2563] Fixed a memory leak bug by freeing all mutex locks in 
  xaf_adev_close API

+ [J2456] Updated runtime commands logic in testbench to allow other
  runtime commands to execute while disconnect API is in progress

----------------------------------------------------------------------
Version 2.1_Alpha API 1.3 : April 23, 2020

+ Alpha release - HiFi4 only
+ Built with RI.2 tools

+ Changed some non-standard return codes from XAF Developer APIs to
  standards XAF Error codes

+ Updated xaf_comp_get_status API to return EXEC_DONE status for
  components returning output or probe data to application

+ [2453] Enhanced mem_malloc and mem_free wrappers to avoid maximum
  number of allocations allowed constraint

+ [2472] Minimum connect buffers between components requirement is 
  reduced from 2 to 1. Note with this change, MIMO class preprocess
  allows execution if any of input port has non-zero data (earlier,
  it would check for non-zero data on all input ports) 

+ [2473] Moved TRACE control tags to xf-debug.h for better 
  configurability

+ [2475] Fixed bug in renderer disconnect API implementation

+ [2486] Increased auxiliary buffer size from 128 to 256 to allow
  32 configuration parameters in xaf_comp_set_config and 
  xaf_comp_get_config API (shared memory usage increases by 4kB)
 
+ [2491] Updated xaf_get_mem_stats API implementation to report
  peak and current memory usage. Note with this change, the API
  expects pointer to array of five integers as second argument 
  (earlier it expected pointer to array of three integers)

+ [2498] Fixed bug of redundant stack allocation during thread
  creation with FreeRTOS

+ [2513] Reduced input buffer size requirement of Opus encoder
  plugin to hold only one frame

+ [2528] Removed fatal error from capturer class in case of output 
  buffer non-availability, this should be handled by plugin

+ [2530] Updated copyright headers to MIT style for all files

+ Programmers Guide not updated

----------------------------------------------------------------------
Version 2.0 API 1.3 : January 31, 2020

+ GA Release - HiFi3, HiFi4 and HiFi5 only
+ Built with RI.2 tools

----------------------------------------------------------------------
Version 1.8_3_Alpha API 1.3 : December 23, 2019

+ Patch release - HiFi4 only
+ Built with RI.2 tools

+ Added MIMO (Multi-Input, Multi-Output) data processing class.

+ Added following new XAF Developer APIs:
    XAF_ERR_CODE xaf_pause(pVOID p_comp, WORD32 port);
    XAF_ERR_CODE xaf_resume(pVOID p_comp, WORD32 port);
    XAF_ERR_CODE xaf_probe_start(pVOID p_comp);
    XAF_ERR_CODE xaf_probe_stop(pVOID p_comp);
    XAF_ERR_CODE xaf_disconnect(pVOID p_src, WORD32 src_out_port, 
                 pVOID p_dest, WORD32 dest_in_port);

+ Updated prototype for xaf_connect API:
    XAF_ERR_CODE xaf_connect(pVOID p_src, WORD32 src_out_port, 
                 pVOID p_dest, WORD32 dest_in_port, WORD32 num_buf);

+ Added support for FreeRTOS.

+ Added support for preemptive scheduling for both XOS and FreeRTOS.

+ Following updates are done for Renderer Class:
- Changed logic to schedule execution of renderer on each interrupt 
  irrespective of input port readiness
- Added XAF_START_FLAG command support for explicit initialization of 
  renderer
- Added support for additional, optional output port to generate 
  reference or feedback output

+ Following updates are done for Audio Codec Class:
- Updated Audio Codec Class to initialize all components except 
  decoders (comp_type XAF_DECODER) without input data

+ Following updates are done for Renderer Plugin:
- Added actual FIFO in the plugin to mimic hardware operation
- Added state configuration parameter (XA_RENDERER_STATE_START) to 
  start renderer hardware operation (e.g. enable interrupt)
  Note, even if this configuration parameter is not used from 
  application, renderer hardware operation starts once FIFO is full
- Added logic to zero-fill output if real data is not available
  At start, this logic would insert zero frames or prepend zeros to 
  real data, if required
  At runtime, this logic would insert zero frames or append zeros to 
  real data, if required
- Added support for additional, optional output port to generate 
  reference or feedback data
- Moved renderer execution from set_input_bytes() to do_execute() 
  function
- Added logic to set exec-done from plugin when input is over

+ Following updates are done for Capturer Plugin:
- Added state configuration parameter (XA_CAPTURER_STATE_START) to 
  start capturer hardware operation (e.g. enable interrupt)
  Note, this configuration parameter must be issued from application 
  for capturer hardware operation to start
- Moved capturer execution from set_mem_ptr() to do_execute() function

+ Updated initialization API call sequence requirement as - 
  initialization status must be queried by xaf_comp_get_status() API
  after xaf_comp_process(...XAF_START_FLAG) API call. 

+ Corrected Capturer output port number to 0 from 1.

+ Added few robustness fixes as per internal QA testing.

+ Added new example testbenches and plugins to demonstrate usage of 
  new features.

+ Programmers Guide not updated.

+ Notes
 - New feature implementation mentioned above has undergone limited 
   testing and may get updated.
 - By default, this release uses XOS as RTOS.
 - To use FreeRTOS instead of XOS, please refer to instructions in 
   'libxa_af_hostless/build/readme-freertos-bld.txt'.
 - XOS is configured with 100 MHz clock frequency with 0.1 ms timer 
   tick resolution whereas FreeRTOS is configured with 50 MHz clock
   frequency with 1 ms timer tick resolution.
 - Known constraint: MCPS computation and prints are not supported
   with FreeRTOS in this release.

----------------------------------------------------------------------
Version 1.4 API 1.1 : March 11, 2019

+ GA release.

----------------------------------------------------------------------
Version 1.3p4_Alpha API 1.1 : August 30, 2018

+ Patch release - HiFi3 and HiFi4 only
+ Built with RG.5 tools

+ [J2117] Fixed an issue in xaf_adev_close function (ensured internal 
  proxy thread is closed properly).
+ [J2118] Sample Rate Convertor plugin wrapper is updated to work 
  with Sample Rate Convertor v1.9 Library.

+ Updated Programmers Guide to indicate 
  - XAF must not be used with fast functional 'TurboSim' mode of 
    Instruction Set Simulator.
  - Sample Rate Convertor plugin wrapper is updated to work with 
    Sample Rate Convertor v1.9 Library.

----------------------------------------------------------------------
Version 1.3p3_Alpha API 1.1 : March 12, 2018

+ Patch release 
+ Built with RG.5 tools

+ [J2004] Fixed an issue in compilation of ISR code (removed -mcoproc
  compile flag for ISR code). 

----------------------------------------------------------------------
Version 1.3p2_Alpha API 1.1 : February 2, 2018

+ Patch release - HiFi4 only
+ Built with RG.5 tools

+ Fixed issues in packaging of release packages.

----------------------------------------------------------------------
Version 1.3p1_Alpha API 1.1 : February 1, 2018

+ Patch release - HiFi3, HiFi4 only
+ Built with RG.5 tools

+ [J1965] Avoided use of cache line size (core specific) while 
  calculating size of cache line aligned DSP Thread Handle struct.  

----------------------------------------------------------------------
Version 1.3_Alpha API 1.1 : December 14, 2017

+ Initial (Alpha) customer release. 

----------------------------------------------------------------------
Version 1.2 API 1.1 : November 21, 2016

+ Known issues in Release 1.1 fixed.
+ Added support for renderer and capturer components.
+ Added AAC-Dec, Renderer, Capturer, SRC components along with
   corresponding test benches.
+ Testbenches updated for Realtek ALC5677 EVM.

----------------------------------------------------------------------
Version 1.1 API 1.1 : June 2, 2016

+ Known issues in Release 1.0 fixed.
+ Added testbenches for mixer, audio encoder and speech decoder.
+ Improved robustness and minor changes in API.

----------------------------------------------------------------------
Version 1.0 API 1.0 : March 04, 2016

+ Initial release.

----------------------------------------------------------------------
Version 0.7 API 1.0 : December 17, 2015

+ Beta release.

----------------------------------------------------------------------
2023-11-17:16:17:/servers/scratch50g/nddivya/XX/XtDevTools/XtensaRegistry/RI-2022.9:855261:837726:855164::