From 2ea2ac8e4ae1d025db9d7ecdb484e9d3d32c9c82 Mon Sep 17 00:00:00 2001 From: wzq Date: Tue, 29 Jul 2025 17:07:48 +0800 Subject: [PATCH] code update 2025_07_29 --- doc/reference/driver/fsec.md | 197 ++ drivers/sec/Kconfig | 11 + drivers/sec/rnd/fsec_rnd.c | 1169 ++++++++ drivers/sec/rnd/fsec_rnd.h | 238 ++ drivers/sec/rnd/fsec_rnd_debug.c | 112 + drivers/sec/rnd/fsec_rnd_g.c | 55 + drivers/sec/rnd/fsec_rnd_hw.h | 95 + drivers/sec/rnd/fsec_rnd_init.c | 97 + drivers/sec/rnd/fsec_rnd_util.c | 208 ++ drivers/sec/rnd/fsec_rnd_util.h | 124 + drivers/sec/src.mk | 20 + example/peripherals/sec/rnd/Kconfig | 17 + example/peripherals/sec/rnd/README.md | 131 + .../configs/pe2202_aarch32_demo_rnd.config | 259 ++ .../configs/pe2202_aarch64_demo_rnd.config | 258 ++ .../configs/pe2204_aarch32_demo_rnd.config | 274 ++ .../pe2204_aarch32_phytiumpi_rnd.config | 259 ++ .../configs/pe2204_aarch64_demo_rnd.config | 258 ++ .../pe2204_aarch64_phytiumpi_rnd.config | 253 ++ .../sec/rnd/fig/fsec_print_info.png | Bin 0 -> 15862 bytes .../sec/rnd/fig/rnd_ptng_default.png | Bin 0 -> 52509 bytes .../sec/rnd/fig/rnd_ptng_default2.png | Bin 0 -> 52509 bytes .../sec/rnd/fig/rng_ptng_16byte.png | Bin 0 -> 55683 bytes .../sec/rnd/inc/fsecrnd_test_example.h | 48 + example/peripherals/sec/rnd/main.c | 54 + example/peripherals/sec/rnd/makefile | 23 + example/peripherals/sec/rnd/sdkconfig | 270 ++ example/peripherals/sec/rnd/sdkconfig.h | 244 ++ example/peripherals/sec/rnd/src/cmd_rnd.c | 80 + .../sec/rnd/src/fsecrnd_test_example.c | 282 ++ .../figs/amp_make_boot_pic.png | Bin 0 -> 184780 bytes .../fig/openamp_echo_remoteproc_build.png | Bin 0 -> 80082 bytes .../fig/openamp_echo_remoteproc_load.png | Bin 0 -> 126782 bytes third-party/libmetal/doc/readthedocs-conf.py | 14 + .../libmetal/metal/processor/generic/atomic.h | 15 + .../libmetal/metal/processor/generic/cpu.h | 17 + .../metal/system/freertos/CMakeLists.txt | 24 + .../libmetal/metal/system/freertos/alloc.h | 39 + .../libmetal/metal/system/freertos/assert.h | 27 + .../libmetal/metal/system/freertos/cache.h | 40 + .../metal/system/freertos/condition.c | 21 + .../metal/system/freertos/condition.h | 62 + .../libmetal/metal/system/freertos/device.c | 31 + .../libmetal/metal/system/freertos/init.c | 28 + .../libmetal/metal/system/freertos/io.c | 31 + .../libmetal/metal/system/freertos/io.h | 44 + .../libmetal/metal/system/freertos/irq.c | 30 + .../libmetal/metal/system/freertos/irq.h | 19 + .../libmetal/metal/system/freertos/log.h | 52 + .../libmetal/metal/system/freertos/mutex.h | 80 + .../libmetal/metal/system/freertos/shmem.c | 18 + .../libmetal/metal/system/freertos/sleep.h | 38 + .../libmetal/metal/system/freertos/sys.h | 64 + .../system/freertos/template/CMakeLists.txt | 4 + .../metal/system/freertos/template/sys.c | 74 + .../metal/system/freertos/template/sys.h | 39 + .../libmetal/metal/system/freertos/time.c | 20 + .../metal/system/freertos/xlnx/CMakeLists.txt | 5 + .../libmetal/metal/system/freertos/xlnx/irq.c | 73 + .../libmetal/metal/system/freertos/xlnx/sys.c | 139 + .../libmetal/metal/system/freertos/xlnx/sys.h | 81 + .../metal/system/generic/xlnx/CMakeLists.txt | 15 + .../libmetal/metal/system/generic/xlnx/irq.c | 76 + .../xlnx/microblaze_generic/CMakeLists.txt | 6 + .../generic/xlnx/microblaze_generic/sys.c | 144 + .../libmetal/metal/system/generic/xlnx/sys.c | 136 + .../libmetal/metal/system/generic/xlnx/sys.h | 92 + .../system/generic/xlnx/sys_devicetree.h | 25 + .../metal/system/nuttx/CMakeLists.txt | 19 + .../libmetal/metal/system/nuttx/alloc.h | 39 + .../libmetal/metal/system/nuttx/assert.h | 27 + .../libmetal/metal/system/nuttx/cache.h | 39 + .../libmetal/metal/system/nuttx/condition.c | 32 + .../libmetal/metal/system/nuttx/condition.h | 51 + .../libmetal/metal/system/nuttx/device.c | 19 + .../libmetal/metal/system/nuttx/init.c | 31 + third-party/libmetal/metal/system/nuttx/io.c | 145 + third-party/libmetal/metal/system/nuttx/io.h | 52 + third-party/libmetal/metal/system/nuttx/irq.c | 91 + third-party/libmetal/metal/system/nuttx/irq.h | 29 + third-party/libmetal/metal/system/nuttx/log.h | 29 + .../libmetal/metal/system/nuttx/mutex.h | 72 + .../libmetal/metal/system/nuttx/shmem.c | 18 + .../libmetal/metal/system/nuttx/sleep.h | 34 + third-party/libmetal/metal/system/nuttx/sys.h | 44 + .../libmetal/metal/system/nuttx/time.c | 27 + .../metal/system/zephyr/CMakeLists.txt | 21 + .../libmetal/metal/system/zephyr/alloc.c | 28 + .../libmetal/metal/system/zephyr/alloc.h | 57 + .../libmetal/metal/system/zephyr/assert.h | 28 + .../libmetal/metal/system/zephyr/cache.h | 40 + .../libmetal/metal/system/zephyr/condition.c | 51 + .../libmetal/metal/system/zephyr/condition.h | 68 + .../libmetal/metal/system/zephyr/device.c | 36 + .../libmetal/metal/system/zephyr/init.c | 27 + third-party/libmetal/metal/system/zephyr/io.h | 55 + .../libmetal/metal/system/zephyr/irq.c | 30 + .../libmetal/metal/system/zephyr/irq.h | 27 + .../libmetal/metal/system/zephyr/log.c | 40 + .../libmetal/metal/system/zephyr/log.h | 30 + .../libmetal/metal/system/zephyr/mutex.h | 88 + .../libmetal/metal/system/zephyr/shmem.c | 18 + .../libmetal/metal/system/zephyr/sleep.h | 35 + .../libmetal/metal/system/zephyr/sys.c | 23 + .../libmetal/metal/system/zephyr/sys.h | 55 + .../libmetal/metal/system/zephyr/time.c | 19 + third-party/openamp/doc/CMakeLists.txt | 29 + third-party/openamp/doc/Doxyfile.in | 2385 +++++++++++++++++ third-party/openamp/doc/data-structure.md | 149 + .../img-src/coprocessor-rpmsg-ns-dynamic.gv | 97 + .../doc/img-src/coprocessor-rpmsg-ns.gv | 95 + .../img-src/coprocessor-rpmsg-static-ep.gv | 87 + third-party/openamp/doc/img-src/gen-graph.py | 55 + .../doc/img-src/rproc-lcm-state-machine.gv | 19 + .../doc/img/coprocessor-rpmsg-ns-dynamic.png | Bin 0 -> 199115 bytes .../openamp/doc/img/coprocessor-rpmsg-ns.png | Bin 0 -> 174691 bytes .../doc/img/coprocessor-rpmsg-static-ep.png | Bin 0 -> 157678 bytes .../doc/img/rproc-lcm-state-machine.png | Bin 0 -> 25547 bytes third-party/openamp/doc/openamp.png | Bin 0 -> 8005 bytes third-party/openamp/doc/readthedocs-conf.py | 14 + third-party/openamp/doc/remoteproc-design.md | 103 + third-party/openamp/doc/rpmsg-design.md | 160 ++ .../openamp/lib/include/internal/utilities.h | 35 + .../openamp/lib/include/openamp/virtio_mmio.h | 219 ++ .../openamp/lib/remoteproc/rsc_table_parser.h | 52 + third-party/openamp/lib/utils/CMakeLists.txt | 1 + third-party/openamp/lib/utils/utilities.c | 35 + .../openamp/lib/virtio_mmio/CMakeLists.txt | 3 + .../openamp/lib/virtio_mmio/virtio_mmio_drv.c | 363 +++ .../openamp-system-reference/LICENSE.md | 70 + .../openamp-system-reference/README.md | 2 + .../examples/legacy_apps/README.md | 66 + .../include/platform_info_common.h | 79 + .../machine/phytium/phytium_rproc.c | 313 +++ .../machine/phytium/platform_info.c | 282 ++ .../machine/phytium/platform_info.h | 100 + .../legacy_apps/machine/phytium/rsc_table.h | 83 + .../legacy_apps/system/CMakeLists.txt | 3 + .../legacy_apps/system/generic/CMakeLists.txt | 1 + .../system/generic/machine/phytium/helper.c | 79 + .../system/generic/machine/phytium/helper.h | 44 + third-party/openamp/ports/version_def.h | 38 + 142 files changed, 13294 insertions(+) create mode 100644 doc/reference/driver/fsec.md create mode 100644 drivers/sec/Kconfig create mode 100644 drivers/sec/rnd/fsec_rnd.c create mode 100644 drivers/sec/rnd/fsec_rnd.h create mode 100644 drivers/sec/rnd/fsec_rnd_debug.c create mode 100644 drivers/sec/rnd/fsec_rnd_g.c create mode 100644 drivers/sec/rnd/fsec_rnd_hw.h create mode 100644 drivers/sec/rnd/fsec_rnd_init.c create mode 100644 drivers/sec/rnd/fsec_rnd_util.c create mode 100644 drivers/sec/rnd/fsec_rnd_util.h create mode 100644 drivers/sec/src.mk create mode 100644 example/peripherals/sec/rnd/Kconfig create mode 100644 example/peripherals/sec/rnd/README.md create mode 100644 example/peripherals/sec/rnd/configs/pe2202_aarch32_demo_rnd.config create mode 100644 example/peripherals/sec/rnd/configs/pe2202_aarch64_demo_rnd.config create mode 100644 example/peripherals/sec/rnd/configs/pe2204_aarch32_demo_rnd.config create mode 100644 example/peripherals/sec/rnd/configs/pe2204_aarch32_phytiumpi_rnd.config create mode 100644 example/peripherals/sec/rnd/configs/pe2204_aarch64_demo_rnd.config create mode 100644 example/peripherals/sec/rnd/configs/pe2204_aarch64_phytiumpi_rnd.config create mode 100644 example/peripherals/sec/rnd/fig/fsec_print_info.png create mode 100644 example/peripherals/sec/rnd/fig/rnd_ptng_default.png create mode 100644 example/peripherals/sec/rnd/fig/rnd_ptng_default2.png create mode 100644 example/peripherals/sec/rnd/fig/rng_ptng_16byte.png create mode 100644 example/peripherals/sec/rnd/inc/fsecrnd_test_example.h create mode 100644 example/peripherals/sec/rnd/main.c create mode 100644 example/peripherals/sec/rnd/makefile create mode 100644 example/peripherals/sec/rnd/sdkconfig create mode 100644 example/peripherals/sec/rnd/sdkconfig.h create mode 100644 example/peripherals/sec/rnd/src/cmd_rnd.c create mode 100644 example/peripherals/sec/rnd/src/fsecrnd_test_example.c create mode 100644 example/system/amp/amp_tools_example/figs/amp_make_boot_pic.png create mode 100644 example/system/amp/openamp_echo_remoteproc_load/master/fig/openamp_echo_remoteproc_build.png create mode 100644 example/system/amp/openamp_echo_remoteproc_load/master/fig/openamp_echo_remoteproc_load.png create mode 100644 third-party/libmetal/doc/readthedocs-conf.py create mode 100644 third-party/libmetal/metal/processor/generic/atomic.h create mode 100644 third-party/libmetal/metal/processor/generic/cpu.h create mode 100644 third-party/libmetal/metal/system/freertos/CMakeLists.txt create mode 100644 third-party/libmetal/metal/system/freertos/alloc.h create mode 100644 third-party/libmetal/metal/system/freertos/assert.h create mode 100644 third-party/libmetal/metal/system/freertos/cache.h create mode 100644 third-party/libmetal/metal/system/freertos/condition.c create mode 100644 third-party/libmetal/metal/system/freertos/condition.h create mode 100644 third-party/libmetal/metal/system/freertos/device.c create mode 100644 third-party/libmetal/metal/system/freertos/init.c create mode 100644 third-party/libmetal/metal/system/freertos/io.c create mode 100644 third-party/libmetal/metal/system/freertos/io.h create mode 100644 third-party/libmetal/metal/system/freertos/irq.c create mode 100644 third-party/libmetal/metal/system/freertos/irq.h create mode 100644 third-party/libmetal/metal/system/freertos/log.h create mode 100644 third-party/libmetal/metal/system/freertos/mutex.h create mode 100644 third-party/libmetal/metal/system/freertos/shmem.c create mode 100644 third-party/libmetal/metal/system/freertos/sleep.h create mode 100644 third-party/libmetal/metal/system/freertos/sys.h create mode 100644 third-party/libmetal/metal/system/freertos/template/CMakeLists.txt create mode 100644 third-party/libmetal/metal/system/freertos/template/sys.c create mode 100644 third-party/libmetal/metal/system/freertos/template/sys.h create mode 100644 third-party/libmetal/metal/system/freertos/time.c create mode 100644 third-party/libmetal/metal/system/freertos/xlnx/CMakeLists.txt create mode 100644 third-party/libmetal/metal/system/freertos/xlnx/irq.c create mode 100644 third-party/libmetal/metal/system/freertos/xlnx/sys.c create mode 100644 third-party/libmetal/metal/system/freertos/xlnx/sys.h create mode 100644 third-party/libmetal/metal/system/generic/xlnx/CMakeLists.txt create mode 100644 third-party/libmetal/metal/system/generic/xlnx/irq.c create mode 100644 third-party/libmetal/metal/system/generic/xlnx/microblaze_generic/CMakeLists.txt create mode 100644 third-party/libmetal/metal/system/generic/xlnx/microblaze_generic/sys.c create mode 100644 third-party/libmetal/metal/system/generic/xlnx/sys.c create mode 100644 third-party/libmetal/metal/system/generic/xlnx/sys.h create mode 100644 third-party/libmetal/metal/system/generic/xlnx/sys_devicetree.h create mode 100644 third-party/libmetal/metal/system/nuttx/CMakeLists.txt create mode 100644 third-party/libmetal/metal/system/nuttx/alloc.h create mode 100644 third-party/libmetal/metal/system/nuttx/assert.h create mode 100644 third-party/libmetal/metal/system/nuttx/cache.h create mode 100644 third-party/libmetal/metal/system/nuttx/condition.c create mode 100644 third-party/libmetal/metal/system/nuttx/condition.h create mode 100644 third-party/libmetal/metal/system/nuttx/device.c create mode 100644 third-party/libmetal/metal/system/nuttx/init.c create mode 100644 third-party/libmetal/metal/system/nuttx/io.c create mode 100644 third-party/libmetal/metal/system/nuttx/io.h create mode 100644 third-party/libmetal/metal/system/nuttx/irq.c create mode 100644 third-party/libmetal/metal/system/nuttx/irq.h create mode 100644 third-party/libmetal/metal/system/nuttx/log.h create mode 100644 third-party/libmetal/metal/system/nuttx/mutex.h create mode 100644 third-party/libmetal/metal/system/nuttx/shmem.c create mode 100644 third-party/libmetal/metal/system/nuttx/sleep.h create mode 100644 third-party/libmetal/metal/system/nuttx/sys.h create mode 100644 third-party/libmetal/metal/system/nuttx/time.c create mode 100644 third-party/libmetal/metal/system/zephyr/CMakeLists.txt create mode 100644 third-party/libmetal/metal/system/zephyr/alloc.c create mode 100644 third-party/libmetal/metal/system/zephyr/alloc.h create mode 100644 third-party/libmetal/metal/system/zephyr/assert.h create mode 100644 third-party/libmetal/metal/system/zephyr/cache.h create mode 100644 third-party/libmetal/metal/system/zephyr/condition.c create mode 100644 third-party/libmetal/metal/system/zephyr/condition.h create mode 100644 third-party/libmetal/metal/system/zephyr/device.c create mode 100644 third-party/libmetal/metal/system/zephyr/init.c create mode 100644 third-party/libmetal/metal/system/zephyr/io.h create mode 100644 third-party/libmetal/metal/system/zephyr/irq.c create mode 100644 third-party/libmetal/metal/system/zephyr/irq.h create mode 100644 third-party/libmetal/metal/system/zephyr/log.c create mode 100644 third-party/libmetal/metal/system/zephyr/log.h create mode 100644 third-party/libmetal/metal/system/zephyr/mutex.h create mode 100644 third-party/libmetal/metal/system/zephyr/shmem.c create mode 100644 third-party/libmetal/metal/system/zephyr/sleep.h create mode 100644 third-party/libmetal/metal/system/zephyr/sys.c create mode 100644 third-party/libmetal/metal/system/zephyr/sys.h create mode 100644 third-party/libmetal/metal/system/zephyr/time.c create mode 100644 third-party/openamp/doc/CMakeLists.txt create mode 100644 third-party/openamp/doc/Doxyfile.in create mode 100644 third-party/openamp/doc/data-structure.md create mode 100644 third-party/openamp/doc/img-src/coprocessor-rpmsg-ns-dynamic.gv create mode 100644 third-party/openamp/doc/img-src/coprocessor-rpmsg-ns.gv create mode 100644 third-party/openamp/doc/img-src/coprocessor-rpmsg-static-ep.gv create mode 100644 third-party/openamp/doc/img-src/gen-graph.py create mode 100644 third-party/openamp/doc/img-src/rproc-lcm-state-machine.gv create mode 100644 third-party/openamp/doc/img/coprocessor-rpmsg-ns-dynamic.png create mode 100644 third-party/openamp/doc/img/coprocessor-rpmsg-ns.png create mode 100644 third-party/openamp/doc/img/coprocessor-rpmsg-static-ep.png create mode 100644 third-party/openamp/doc/img/rproc-lcm-state-machine.png create mode 100644 third-party/openamp/doc/openamp.png create mode 100644 third-party/openamp/doc/readthedocs-conf.py create mode 100644 third-party/openamp/doc/remoteproc-design.md create mode 100644 third-party/openamp/doc/rpmsg-design.md create mode 100644 third-party/openamp/lib/include/internal/utilities.h create mode 100644 third-party/openamp/lib/include/openamp/virtio_mmio.h create mode 100644 third-party/openamp/lib/remoteproc/rsc_table_parser.h create mode 100644 third-party/openamp/lib/utils/CMakeLists.txt create mode 100644 third-party/openamp/lib/utils/utilities.c create mode 100644 third-party/openamp/lib/virtio_mmio/CMakeLists.txt create mode 100644 third-party/openamp/lib/virtio_mmio/virtio_mmio_drv.c create mode 100644 third-party/openamp/openamp-system-reference/LICENSE.md create mode 100644 third-party/openamp/openamp-system-reference/README.md create mode 100644 third-party/openamp/openamp-system-reference/examples/legacy_apps/README.md create mode 100644 third-party/openamp/openamp-system-reference/examples/legacy_apps/include/platform_info_common.h create mode 100644 third-party/openamp/openamp-system-reference/examples/legacy_apps/machine/phytium/phytium_rproc.c create mode 100644 third-party/openamp/openamp-system-reference/examples/legacy_apps/machine/phytium/platform_info.c create mode 100644 third-party/openamp/openamp-system-reference/examples/legacy_apps/machine/phytium/platform_info.h create mode 100644 third-party/openamp/openamp-system-reference/examples/legacy_apps/machine/phytium/rsc_table.h create mode 100644 third-party/openamp/openamp-system-reference/examples/legacy_apps/system/CMakeLists.txt create mode 100644 third-party/openamp/openamp-system-reference/examples/legacy_apps/system/generic/CMakeLists.txt create mode 100644 third-party/openamp/openamp-system-reference/examples/legacy_apps/system/generic/machine/phytium/helper.c create mode 100644 third-party/openamp/openamp-system-reference/examples/legacy_apps/system/generic/machine/phytium/helper.h create mode 100644 third-party/openamp/ports/version_def.h diff --git a/doc/reference/driver/fsec.md b/doc/reference/driver/fsec.md new file mode 100644 index 000000000..cb031fed7 --- /dev/null +++ b/doc/reference/driver/fsec.md @@ -0,0 +1,197 @@ +# SEC 驱动程序 + +## 1. 概述 + + +- 本驱动程序提供了PE220x平台(包括PE220x的Q/Ddemo板、飞腾派)的secure安全密码引擎功能,rnd随机数生成功能 + +- SEC可包含密码引擎接口控制器,支持对称引擎、哈希引擎、硬随机数算法 + +. +├── fsec_rnd.c +├── fsec_rnd.h +├── fsec_rnd_debug.c +├── fsec_rnd_g.c +├── fsec_rnd_hw.h +├── fsec_rnd_init.c +├── fsec_rnd_util.c +└── fsec_rnd_util.h + +## 2. 驱动功能 + +SEC下rnd驱动程序管理在phytium随机数生成: + +- 支持物理池产生随机数 +- 支持自动或手动触发模式 + +## 3. 使用方法 + +以下部分将指导您完成SEC下rnd驱动: + +- 1. SEC下rnd驱动支持PE220x的Q/D板完成测试,支持PD2308的配置 +- 2. SEC下rnd驱动支持PE2408平台的随机数配置及验证 + +## 4. 应用示例 + +### [fsec](../../../example/peripherals/sec/rnd/README.md) + +## 5. API参考 + + +### 5.1. 用户数据结构 + +- peripherals/sec/rnd/fsec_rnd.h + +```c + +typedef struct { +#ifndef SDT + u16 device_id; /**< device_id is the unique ID of the * device */ +#else + char *name; +#endif + uintptr_t base_address; /**< base_address is the physical base address * of the device's registers */ +} FSecRndConig; + +``` + +- SEC驱动RND实例配置 + +```c + +typedef struct { + FSecRndConig config; /**< Hardware Configuration */ + FSecRndUsrConig usr_cfg; /**< Configuration from the user */ + FSecRndStats trng_stats; /**< FSECRND Statistics */ + FSecRndCtrl_State state; /**< takes one of the possible values indicated by FSecRndCtrl_State */ + u32 rand_bit_buf[FSEC_RND_BUF_LEN]; /**< buffer of random bits to minimize latency */ + u32 entropy_size; /**< actual size (in bytes) of seed */ + FSecRndDFInput df_input; /**< data structure which is input to the DF operation */ + u8 df_output[FSEC_RND_SEED_LEN_BYTES]; /**< Output of the DF operation (contains updated seed or random number) */ +} FSecRndCtrl; +``` + +- SEC驱动RND驱动实例 + +### 5.2 错误码定义 + +#define FSECRND_SUCCESS : 成功 +#define FSECRND_FAILURE : 常规报错 +#define FSECRND_ERR_TIMEOUT : 数据接收延时报错 +#define FSECRND_ERR_GLITCH : 小故障报错 +#define FSECRND_ERR_INVALID_PARAM : 无效参数报错 + + +### 5.3 用户API接口 + + +```c +FSecRndConig *FSecRndLookupConfig(u16 DeviceId); +``` +- 获取SEC下rnd驱动的默认配置参数 + +Note: + + - 用户需要修改配置参数时,作为FSecRndLookupConfig函数的入参, + +Input: + + - u16 DeviceId, 当前控制的SEC控制器实例号 + +Return: + + - FSecRndConig *, 返回驱动默认参数, NULL表示失败 + + +```c +s32 FSecRndCfgInitialize(FSecRndCtrl *InstancePtr, const FSecRndConig *cfgptr,uintptr_t effective_addr); +``` +- 完成SEC下rnd驱动实例的初始化,使之可以使用 + +Note: + + - 此函数会将驱动实例中的所有数据全部重置 + +Input: + + - FSecRndCtrl *InstancePtr, rnd驱动实例数据 + + - const FSecRndConig *cfgptr, rnd驱动配置数据 + + - uintptr_t effective_addr, rnd驱动soc寄存器地址 + +Return: + + - FError,参考sec错误码定义 + +```c +s32 FSecRndInstantiate(FSecRndCtrl *InstancePtr, const FSecRndUsrConig *configur_values); +``` + +- 完成SEC下rnd驱动实例的配置参数 + +Note: + + - 此函数会将驱动实例中配置随机数的配置数据, + +Input: + + - FSecRndCtrl *InstancePtr, SEC下rnd驱动实例数据 + + - const FSecRndUsrConig *configur_values,用户随机数的如种子等其它配置结构体实例数据 + +Return: + + - FError,参考驱动sec错误码定义表 + +```c +s32 FSecRndGenerate(FSecRndCtrl *InstancePtr, u8 *rand_buf_ptr, u32 rand_buf_size, u8 pred_resistance_en, u32 rand_size);; +``` +- 完成SEC下rnd驱动随机数产生 + + +Input: + - @param {rnd} *InstancePtr , SEC下rnd驱动实例数据 + - @param {u8} rand_buf_ptr ,存放随机生成指针 + - @param {u32} rand_buf_size, 默认随机数4096 + - @param {u8} pred_resistance_en ,随机数池状态控制 + - @param {u32} rand_size ,实际获取进入缓冲区的长度 + +Return: + - FError,参考驱动sec错误码定义表 + +```c +s32 FSecRndUninstantiate(FSecRndCtrl *InstancePtr); +``` + +- SEC下rnd驱动实例的配置参数重置 + +Note: + + - 此函数会将驱动实例中配置随机数的配置数据复位为0, + +Input: + + - FSecRndCtrl *InstancePtr, SEC下rnd驱动实例数据 + +Return: + + - FError,参考驱动sec错误码定义表 + +```c +s32 FSecRndRunHealthTest(FSecRndCtrl *InstancePtr); +``` + +- SEC下rnd驱动实例的配置参数测试 + +Note: + + - 此函数会将驱动实例中配置参数满足性健康测试,比如模式选择、随机数存储池状态等 + +Input: + + - FSecRndCtrl *InstancePtr, SEC下rnd驱动实例数据指针句柄 + +Return: + + - FError,参考驱动sec错误码定义表 diff --git a/drivers/sec/Kconfig b/drivers/sec/Kconfig new file mode 100644 index 000000000..cc5830495 --- /dev/null +++ b/drivers/sec/Kconfig @@ -0,0 +1,11 @@ +menu "SEC Configuration" +config ENABLE_FRND + bool + prompt "Use FRND" + default n + +config ENABLE_FSHA + bool + prompt "Use FSHA" + default n +endmenu \ No newline at end of file diff --git a/drivers/sec/rnd/fsec_rnd.c b/drivers/sec/rnd/fsec_rnd.c new file mode 100644 index 000000000..71171ddf1 --- /dev/null +++ b/drivers/sec/rnd/fsec_rnd.c @@ -0,0 +1,1169 @@ +/* + * Copyright (C) 2025, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: fsec_rnd.c + * Created Date: 2025-07-04 17:37:36 + * Last Modified: 2025-07-21 16:25:14 + * Description: This file is for secure + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + * v1.0 kangkaiping 2025/07/09 first release + */ + + + +/*************************************** Include Files *******************************************/ + +#include "fsec_rnd.h" +#include "fparameters.h" +#include "fassert.h" +/************************************ Constant Definitions ***************************************/ + +#define FSEC_RND_DEBUG_TAG "FSEC_RND" +#define FSEC_RND_DEBUG_D(format, ...) FT_DEBUG_PRINT_D(FPCIE_DMA_DEBUG_TAG, format, ##__VA_ARGS__) +#define FSEC_RND_DEBUG_I(format, ...) FT_DEBUG_PRINT_I(FPCIE_DMA_DEBUG_TAG, format, ##__VA_ARGS__) +#define FSEC_RND_DEBUG_W(format, ...) FT_DEBUG_PRINT_W(FPCIE_DMA_DEBUG_TAG, format, ##__VA_ARGS__) +#define FSEC_RND_DEBUG_E(format, ...) FT_DEBUG_PRINT_E(FPCIE_DMA_DEBUG_TAG, format, ##__VA_ARGS__) + + +/************************************** Type Definitions *****************************************/ + +/*************************** Macros (Inline Functions) Definitions *******************************/ + +/*************************************************************************************************/ + +/************************************ Function Prototypes ****************************************/ + +static void FSecRnd_Reset(const FSecRndCtrl *InstancePtr); +static void FSecRnd_SoftReset(const FSecRndCtrl *InstancePtr); +static void FSecRnd_HoldReset(const FSecRndCtrl *InstancePtr); +static s32 FSecRnd_CollectRandData(FSecRndCtrl *InstancePtr, u32 *rand_gen_buf, u32 num_of_rand_bytes); +static s32 FSecRnd_ReseedInternal(FSecRndCtrl *InstancePtr, const u8 *ext_seed_ptr, u8 *pers_str_ptr, u32 df_len_mul); +static s32 FSecRnd_WriteRegs(const FSecRndCtrl *InstancePtr, u32 start_reg_offset, u32 num_regs, const u8 *init_buf); +static s32 FSecRnd_CheckSeedPattern(u8 *entropy_data, u32 entropy_length); +static inline u32 FSecRnd_ReadReg(uintptr_t baseaddress, u32 regoffset); +static inline void FSecRnd_WriteReg(uintptr_t baseaddress, u32 regoffset, u32 reg_value); +static inline void FSecRnd_RMW32(uintptr_t baseaddress, u32 regoffset, u32 reg_mask, u32 reg_value); +/************************************ Variable Definitions ***************************************/ + +/*************************************************************************************************/ +/** + * @brief + * This function initializes the TRNGFSECRND instance/driver. + * + * @param InstancePtr is a pointer to the FSecRndCtrl instance to be worked on. + * @param cfgptr points to the configuration structure associated with the TRNGFSECRND driver. + * @param effective_addr is the base address of the device. + * + * @return + * - FSEC_RND_SUCCESS if initialization was successful. + * - FSECRND_ERROR_INVALID_PARAM if invalid parameter passed to this function. + * + **************************************************************************************************/ +s32 FSecRndCfgInitialize(FSecRndCtrl *InstancePtr, const FSecRndConig *cfgptr, + uintptr_t effective_addr) +{ + volatile s32 status = FSEC_RND_FAILURE; + + /* Validate arguments. */ + + if (InstancePtr == NULL) { + status = (s32)FSECRND_ERROR_INVALID_PARAM; + goto end; + } + + if ((cfgptr == NULL) || (effective_addr == (uintptr_t)0U)) { + status = (s32)FSECRND_ERROR_INVALID_PARAM; + goto set_err; + } + + /* Populate Config parameters */ + #ifndef SDT + InstancePtr->config.device_id = cfgptr->device_id; + #else + InstancePtr->config.Name = cfgptr->name; + #endif + InstancePtr->config.base_address = effective_addr; + + InstancePtr->state = FSECRND_UNINITIALIZED; + status = (s32)FSEC_RND_SUCCESS; + +set_err: + if (status != FSEC_RND_SUCCESS) { + InstancePtr->state = FSECRND_ERROR; + } + +end: + return status; +} + +/*************************************************************************************************/ +/** + * @brief + * This function further initializes i.e. instantiates the TRNGFSECRND instance/driver with user + * configuration, resets the TRNG core and reseeds with initial seed and personalization string + * provided during Instantiation. Switching to a new state of attributes or changing any attributes + * (configured during Instantiation) requires UnInstantiation of the current instance and + * instantiation of a new instance. After successful Instantiation, State of the driver is changed + * to Healthy. + * + * @param InstancePtr is a pointer to the FSecRndCtrl instance to be worked on. + * @param configur_values points to the user configuration structure associated with the + * TRNGFSECRND driver. + * + * @return + * - FSEC_RND_SUCCESS if Instantiation was successful. + * - FSECRND_ERROR_INVALID_PARAM if invalid parameter(s) passed to this function. + * - FSECRND_ERROR_NOT_UNINSTANTIATED if the driver is not uninstantiated earlier. + * - FSECRND_ERROR_INVALID_USRCFG_MODE if invalid Mode parameter. + * - FSECRND_ERROR_INVALID_USRCFG_SEEDLIFE if SeedLife parameter is invalid + * - FSECRND_ERROR_INVALID_USRCFG_PREDRES if invalid Prediction Resistance parameter. + * - FSECRND_ERROR_INVALID_USRCFG_PERSPRES if PersStrPresent parameter is invalid. + * - FSECRND_ERROR_INVALID_USRCFG_SEEDPRES if InitSeedPresent parameter is invalid. + * - FSECRND_ERROR_NO_SEED_INSTANTIATE if no seed passed for DRNG mode. + * - FSECRND_ERROR_INVALID_USRCFG_DFDIS if DFDisable parameter is invalid. + * - FSECRND_ERROR_INVALID_USRCFG_DFLENMUL if df_len_mul parameter is invalid. + * - FSECRND_ERROR_USRCFG_CPY if error during copy of configur_values structure. + * - Other error codes from the called functions as defined in XTrngpsv_ErrorCodes. + * + **************************************************************************************************/ + +s32 FSecRndInstantiate(FSecRndCtrl *InstancePtr, const FSecRndUsrConig *configur_values) +{ + volatile s32 status = FSEC_RND_FAILURE; + const u8 *seed_ptr; + u8 *pers_ptr; + + /* Validate arguments. */ + if (InstancePtr == NULL) { + status = (s32)FSECRND_ERROR_INVALID_PARAM; + goto end; + } + + if (configur_values == NULL) { + status = (s32)FSECRND_ERROR_INVALID_PARAM; + goto set_err; + } + + /* + * If device not in uninitialized state, return error so that user can uninstantiate first + * before instantiating again. + */ + if (InstancePtr->state != FSECRND_UNINITIALIZED) { + status = (s32)FSECRND_ERROR_NOT_UNINSTANTIATED; + goto set_err; + } + + /* Validate User configuration parameters */ + + if ((configur_values->mode != FSECRND_HRNG) && (configur_values->mode != FSECRND_DRNG) + && (configur_values->mode != FSECRND_PTRNG)) { + status = (s32)FSECRND_ERROR_INVALID_USRCFG_MODE; + goto set_err; + } + + if ((configur_values->mode != FSECRND_PTRNG) + && ((configur_values->seed_life < FSEC_RND_MIN_SEEDLIFE) + || (configur_values->seed_life > FSEC_RND_MAX_SEEDLIFE))) { + status = (s32)FSECRND_ERROR_INVALID_USRCFG_SEEDLIFE; + goto set_err; + } + + if ((configur_values->pred_resistance_en != FSEC_RND_FALSE) + && (configur_values->pred_resistance_en != FSEC_RND_TRUE)) { + status = (s32)FSECRND_ERROR_INVALID_USRCFG_PREDRES; + goto set_err; + } + + if ((configur_values->pers_str_present != FSEC_RND_FALSE) + && (configur_values->pers_str_present != FSEC_RND_TRUE)) { + status = (s32)FSECRND_ERROR_INVALID_USRCFG_PERSPRES; + goto set_err; + } + + if ((configur_values->init_seed_present != FSEC_RND_FALSE) + && (configur_values->init_seed_present != FSEC_RND_TRUE)) { + status = (s32)FSECRND_ERROR_INVALID_USRCFG_SEEDPRES; + goto set_err; + } + + if ((configur_values->init_seed_present == FSEC_RND_FALSE) + && (configur_values->mode == FSECRND_DRNG)) { + status = (s32)FSECRND_ERROR_NO_SEED_INSTANTIATE; + goto set_err; + } + + if ((configur_values->init_seed_present == FSEC_RND_TRUE) + && (configur_values->mode == FSECRND_HRNG)) { + status = (s32)FSECRND_ERROR_UNNECESSARY_PARAM_INSTANTIATE; + goto set_err; + } + + if ((configur_values->df_disable != FSEC_RND_FALSE) + && (configur_values->df_disable != FSEC_RND_TRUE)) { + status = (s32)FSECRND_ERROR_INVALID_USRCFG_DFDIS; + goto set_err; + } + + if ((configur_values->df_disable == FSEC_RND_FALSE) + && ((configur_values->df_len_mul < FSEC_RND_MIN_DFLENMUL) + || (configur_values->df_len_mul > FSEC_RND_MAX_DFLENMUL))) { + status = (s32)FSECRND_ERROR_INVALID_USRCFG_DFLENMUL; + goto set_err; + } + + if ((configur_values->df_disable == FSEC_RND_TRUE) && (configur_values->df_len_mul != 0U)) { + status = (s32)FSECRND_ERROR_INVALID_USRCFG_DFLENMUL; + goto set_err; + } + + if ((configur_values->mode == FSECRND_PTRNG) + && ((configur_values->init_seed_present == FSEC_RND_TRUE) + || (configur_values->pers_str_present == FSEC_RND_TRUE) + || (configur_values->pred_resistance_en == FSEC_RND_TRUE) + || (configur_values->seed_life != 0U))) { + status = (s32)FSECRND_ERROR_UNNECESSARY_PARAM_INSTANTIATE; + goto set_err; + } + + /* Copy user configuration attributes to the Instance pointer */ + status = FSecRND_SecureMemCpy(&InstancePtr->usr_cfg, (u32)sizeof(FSecRndUsrConig), + configur_values, (u32)sizeof(FSecRndUsrConig)); + if (status != FSEC_RND_SUCCESS) { + status = (s32)FSECRND_ERROR_USRCFG_CPY; + goto set_err; + } + + /* Reset the device for a clean state */ + FSecRnd_Reset(InstancePtr); + + seed_ptr = (InstancePtr->usr_cfg.init_seed_present == FSEC_RND_TRUE) ? + (u8*)InstancePtr->usr_cfg.init_seed : NULL; + pers_ptr = (InstancePtr->usr_cfg.pers_str_present == FSEC_RND_TRUE) ? + (u8*)InstancePtr->usr_cfg.pers_string : NULL; + + status = FSEC_RND_FAILURE; + status = FSecRND_SMemSet((u8*)InstancePtr->rand_bit_buf, sizeof(InstancePtr->rand_bit_buf), 0U, + sizeof(InstancePtr->rand_bit_buf)); + if (status != FSEC_RND_SUCCESS) { + goto set_err; + } + + status = FSEC_RND_FAILURE; + /* Reseed device with initial seed and personalization string */ + if ((InstancePtr->usr_cfg.mode == FSECRND_HRNG) + || (InstancePtr->usr_cfg.mode == FSECRND_DRNG)) { + + status = FSecRnd_ReseedInternal(InstancePtr, seed_ptr, pers_ptr, InstancePtr->usr_cfg.df_len_mul); + + status = FSEC_RND_SUCCESS; + + if (status != FSEC_RND_SUCCESS) { + goto set_err; + } + } + + /* Mark the state of the device as Healthy */ + InstancePtr->state = FSECRND_HEALTHY; + status = FSEC_RND_SUCCESS; + +set_err: + if (status != FSEC_RND_SUCCESS) { + InstancePtr->state = FSECRND_ERROR; + } + +end: + return status; +} + +/*************************************************************************************************/ +/** + * @brief + * This function reseeds the TRNG in DRNG, HRNG modes. This function will be called by random + * number consuming application. This is just a wrapper function calling XTrng_ReseedInternal() + * which passes NULL as personalization string. + * + * @param InstancePtr is a pointer to the FSecRndCtrl instance to be worked on. + * @param ext_seed_ptr points to the byte array containing external seed. This shall be NULL + * for HRNG case. + * @param df_len_mul is DF Length multiplier used to determine number of bits on the input of + * the DF construct which is (df_len_mul + 1)*128 bits. This indicates the size of the + * seed pointed by ext_seed_ptr. This shall be 0 for Non-DF case. + * + * @return + * - FSEC_RND_SUCCESS if Reseed was successful. + * - FSECRND_ERROR_INVALID_PARAM if invalid parameter(s) passed to this function. + * - FSECRND_ERROR_INVALID_STATE if driver is not Healthy state before invoking this. + * - FSECRND_ERROR_SEED_INVALID_MODE if this is called in PTRNG mode. + * - FSECRND_ERROR_NO_SEED if no seed passed for DRNG mode. + * - FSECRND_ERROR_UNNECESSARY_PARAM if seed passed for non-DRNG mode. + * - FSECRND_ERROR_INVALID_RESEED_DFLENMUL if invalid df_len_mul parameter passed. + * - FSECRND_ERROR_SAME_SEED if same seed passed for both Instantiation and Reseed. + * - Other error codes from the called functions as defined in XTrngpsv_ErrorCodes. + * + **************************************************************************************************/ +s32 FSecRndReseed(FSecRndCtrl *InstancePtr, const u8 *ext_seed_ptr, u32 df_len_mul) +{ + volatile s32 status = FSEC_RND_FAILURE; + volatile s32 result = FSEC_RND_SUCCESS; + volatile s32 result_tmp = FSEC_RND_SUCCESS; + + /* Validate parameters */ + if (InstancePtr == NULL) { + status = (s32)FSECRND_ERROR_INVALID_PARAM; + goto end; + } + + if (InstancePtr->state != FSECRND_HEALTHY) { + status = (s32)FSECRND_ERROR_INVALID_STATE; + goto set_err; + } + + if ((InstancePtr->usr_cfg.mode != FSECRND_DRNG) + && (InstancePtr->usr_cfg.mode != FSECRND_HRNG)) { + status = (s32)FSECRND_ERROR_SEED_INVALID_MODE; + goto set_err; + } + + if ((InstancePtr->usr_cfg.mode == FSECRND_DRNG) && (ext_seed_ptr == NULL)) { + status = (s32)FSECRND_ERROR_NO_SEED; + goto set_err; + } + + if ((InstancePtr->usr_cfg.mode != FSECRND_DRNG) && (ext_seed_ptr != NULL)) { + status = (s32)FSECRND_ERROR_UNNECESSARY_PARAM; + goto set_err; + } + + if ((InstancePtr->usr_cfg.df_disable == FSEC_RND_FALSE) + && ((df_len_mul < FSEC_RND_MIN_DFLENMUL) || (df_len_mul > FSEC_RND_MAX_DFLENMUL))) { + status = (s32)FSECRND_ERROR_INVALID_RESEED_DFLENMUL; + goto set_err; + } + + if ((InstancePtr->usr_cfg.df_disable == FSEC_RND_TRUE) && (df_len_mul != 0U)) { + status = (s32)FSECRND_ERROR_INVALID_RESEED_DFLENMUL; + goto set_err; + } + + if (ext_seed_ptr != NULL) { + /* if initial seed during instantiation and reseed is same, it is an error*/ + FSEC_TEMPORAL_IMPL(result, result_tmp, FSecRND_SMemCmp, + ext_seed_ptr, FSEC_RND_SEED_LEN_BYTES, InstancePtr->usr_cfg.init_seed, + InstancePtr->entropy_size, InstancePtr->entropy_size); + if ((result == FSEC_RND_SUCCESS) || (result_tmp == FSEC_RND_SUCCESS)) { + status = (s32)FSECRND_ERROR_SAME_SEED; + goto set_err; + } + } + + /* Call the actual reseed function */ + status = FSecRnd_ReseedInternal(InstancePtr, ext_seed_ptr, NULL, df_len_mul); + + status = FSEC_RND_SUCCESS; + +set_err: + if (status != FSEC_RND_SUCCESS) { + InstancePtr->state = FSECRND_ERROR; + } + +end: + return status; +} + +/*************************************************************************************************/ +/** + * @brief + * This the function which actually generates and provides random bits to the caller. Number of bits + * generated per call is 256 bits. If user needs more bits of random data, this API can be called + * multiple times accordingly. + * + * @param InstancePtr is a pointer to the FSecRndCtrl instance to be worked on. + * @param rand_buf_ptr points to memory address where generated random data will be stored and + * the memory address should be word aligned. + * @param rand_buf_size is size of the buffer to which rand_buf_ptr points to and it should + * be always greater than or equal to FSEC_RND_STRENGTH_BYTES. + * @param pred_resistance_en is the flag that controls Generate level Prediction Resistance. + * When enabled, it mandates fresh seed for every Generate operation. + * + * @return + * - FSEC_RND_SUCCESS if Random number generation was successful. + * - FSECRND_ERROR_INVALID_PARAM if invalid parameter(s) passed to this function. + * - FSECRND_ERROR_INVALID_STATE if driver is not Healthy state before invoking this. + * - FSECRND_ERROR_INSUFFICIENT_RANDBUF if length of Buffer passed is insufficient. + * - FSECRND_ERROR_INVALID_GEN_PREDRES if Prediction Resistance set for PTRNG mode. + * - FSECRND_ERROR_RESEEDING_REQUIRED if SeedLife elapsed. + * - FSECRND_ERROR_RESEED_REQD_PREDRES if seed is consumed and has Pred Resistance. + * - FSECRND_ERROR_GLITCH if error caused due to glitch conditions. + * - Other error codes from the called functions as defined in XTrngpsv_ErrorCodes. + * + *************************************************************************************************/ +s32 FSecRndGenerate(FSecRndCtrl *InstancePtr, u8 *rand_buf_ptr, u32 rand_buf_size, u8 pred_resistance_en, u32 rand_size) +{ + + volatile s32 status = FSEC_RND_FAILURE; + u8 *rand_gen_buf = rand_buf_ptr; + + u32 NumBytes = rand_size; + + /* validate parameters */ + if (InstancePtr == NULL) { + status = (s32)FSECRND_ERROR_INVALID_PARAM; + goto end; + } + + if (rand_gen_buf == NULL) { + status = (s32)FSECRND_ERROR_INVALID_PARAM; + goto set_err; + } + + if (((uintptr_t)rand_gen_buf & FSEC_RND_WORD_ALIGN_MASK) != 0U) { + status = (s32)FSECRND_ERROR_INVALID_RANDBUF_ADDR; + goto set_err; + } + + if (InstancePtr->state != FSECRND_HEALTHY) { + status = (s32)FSECRND_ERROR_INVALID_STATE; + goto set_err; + } + + if ((InstancePtr->usr_cfg.mode == FSECRND_PTRNG) && (pred_resistance_en == FSEC_RND_TRUE)) { + status = (s32)FSECRND_ERROR_INVALID_GEN_PREDRES; + goto set_err; + } + + /** + * If during Instantiation Prediction Resistance is enabled and + * not during Generate, its an error + */ + if ((InstancePtr->usr_cfg.pred_resistance_en == FSEC_RND_FALSE) + && (pred_resistance_en == FSEC_RND_TRUE)) { + status = (s32)FSECRND_ERROR_PREDRES_MISMATCH; + goto set_err; + } + + + if (InstancePtr->usr_cfg.mode == FSECRND_HRNG) { + /* Reseed if SeedLife elapsed */ + if (InstancePtr->trng_stats.elapsed_seed_life >= InstancePtr->usr_cfg.seed_life) { + + status = FSecRnd_ReseedInternal(InstancePtr, NULL, NULL, 0U); + status = FSEC_RND_SUCCESS; + + if (status != FSEC_RND_SUCCESS) { + goto set_err; + } + } + + /* If prediction resistance enabled but seed is not new, + * reseed now + */ + if ((InstancePtr->usr_cfg.pred_resistance_en == FSEC_RND_TRUE) + && (pred_resistance_en == FSEC_RND_TRUE) + && (InstancePtr->trng_stats.elapsed_seed_life > 0U)) { + + status = FSEC_RND_FAILURE; + + status = FSecRnd_ReseedInternal(InstancePtr, NULL, NULL, 0U); + status = FSEC_RND_SUCCESS; + + if (status != FSEC_RND_SUCCESS) { + goto set_err; + } + } + status = FSEC_RND_FAILURE; + + status = FSecRND_SecureOut32(InstancePtr->config.base_address + FSEC_TRNG_CTRL, FSEC_RND_MODE_GEN | FSEC_TRNG_CTRL_PRNGXS_MASK); + + if (status != FSEC_RND_SUCCESS) { + status = (s32)FSECRND_ERROR_GLITCH; + goto set_err; + } + + } + else if (InstancePtr->usr_cfg.mode == FSECRND_DRNG) { + + /* Error if SeedLife elapsed */ + if (InstancePtr->trng_stats.elapsed_seed_life > InstancePtr->usr_cfg.seed_life) { + status = (s32)FSECRND_ERROR_RESEEDING_REQUIRED; + goto set_err; + } + + /* If prediction resistance enabled but seed is not new, + * its an error + */ + if ((InstancePtr->usr_cfg.pred_resistance_en == FSEC_RND_TRUE) + && (pred_resistance_en == FSEC_RND_TRUE) + && (InstancePtr->trng_stats.elapsed_seed_life > 0U)) { + status = (s32)FSECRND_ERROR_RESEED_REQD_PREDRES; + goto set_err; + } + + + + status = FSecRND_SecureOut32(InstancePtr->config.base_address + FSEC_RN_POOL_CTL_OFFSET,FSEC_RN_POOL_FILL_REQ); + + + if (status != FSEC_RND_SUCCESS) { + status = (s32)FSECRND_ERROR_GLITCH; + goto set_err; + } + } + else { /* UsrCfg.Mode == FSECRND_PTRNG */ + + if (InstancePtr->usr_cfg.df_disable == FSEC_RND_FALSE) { + + NumBytes = (InstancePtr->usr_cfg.df_len_mul + 1U) * FSEC_BYTES_PER_BLOCK; + InstancePtr->entropy_size = NumBytes; + + /* fill the DFInput datastructure with 0s so that + * it can be populated + */ + status = FSecRND_SMemSet((u8*)&InstancePtr->df_output, (u32)sizeof(InstancePtr->df_input), 0U, + (u32)sizeof(InstancePtr->df_input)); + if (status != FSEC_RND_SUCCESS) { + goto set_err; + } + + rand_gen_buf = (u8*)InstancePtr->df_input.entropy_data; + } + /* + * Enable all the 8 ring oscillators used for entropy source + * Provide soft reset, Enable loading entropy data as random number + */ + status = FSEC_RND_FAILURE; + + /* osc 使能*/ + status = FSecRND_SecureOut32(InstancePtr->config.base_address + FSEC_RN_POOL_CTL_OFFSET, FSEC_TRNG_CLOCK_ENABLE); + + if (status != FSEC_RND_SUCCESS) { + status = (s32)FSECRND_ERROR_GLITCH; + goto set_err; + } + + FSecRnd_SoftReset(InstancePtr); + + status = FSEC_RND_FAILURE; + + status = FSecRND_SecureOut32(InstancePtr->config.base_address + FSEC_TRNG_CTRL, FSEC_TRNG_CTRL_EUMODE_MASK | FSEC_TRNG_CTRL_TRSSEN_MASK); + + if (status != FSEC_RND_SUCCESS) { + status = (s32)FSECRND_ERROR_GLITCH; + goto set_err; + } + } + + /* Collect random data based on above configuration*/ + + FSecRnd_CollectRandData(InstancePtr,(u32*)rand_buf_ptr, NumBytes); + + InstancePtr->trng_stats.rand_bytes_reseed += NumBytes; + InstancePtr->trng_stats.rand_bytes += NumBytes; + InstancePtr->trng_stats.elapsed_seed_life++; + +set_err: + if ((status != FSEC_RND_SUCCESS) && (InstancePtr->state != FSECRND_CATASTROPHIC)) { + InstancePtr->state = FSECRND_ERROR; + } + +end: + return status; +} + +/*************************************************************************************************/ +/** + * @brief + * This function is used to put the TRNG in reset state, and clear the instance + * data including configuration, status. + * + * @param InstancePtr is a pointer to the FSecRndCtrl instance to be worked on. + * + * @return + * - FSEC_RND_SUCCESS if Uninstantiation was successful. + * - FSECRND_ERROR_INVALID_PARAM if invalid parameter(s) passed to this function. + * - FSECRND_ERROR_INVALID_STATE if driver is not Healthy state before invoking this. + * - FSECRND_ERROR_GLITCH if error caused due to glitch conditions. + * + **************************************************************************************************/ +s32 FSecRndUninstantiate(FSecRndCtrl *InstancePtr) +{ + volatile s32 status = FSEC_RND_FAILURE; + + /* Validate arguments. */ + if (InstancePtr == NULL) { + status = (s32)FSECRND_ERROR_INVALID_PARAM; + goto end; + } + + if (InstancePtr->state == FSECRND_UNINITIALIZED) { + status = (s32)FSECRND_ERROR_INVALID_STATE; + goto set_err; + } + + /* clear contents of external seed and personalization string */ + status = FSecRnd_WriteRegs(InstancePtr, FSEC_TRNG_EXT_SEED_0, FSEC_RND_SEED_LEN, NULL); + if (status != FSEC_RND_SUCCESS) { + goto set_err; + } + + status = FSEC_RND_FAILURE; + status = FSecRnd_WriteRegs(InstancePtr, FSEC_TRNG_PER_STRNG_0, FSEC_RND_PERS_STR_LEN, NULL); + if (status != FSEC_RND_SUCCESS) { + goto set_err; + } + + FSecRnd_HoldReset(InstancePtr); + + /* Clear the instance datastructure */ + status = FSEC_RND_FAILURE; + status = FSecRND_SMemSet(((u8*)InstancePtr + sizeof(InstancePtr->config)), + (u32)(sizeof(FSecRndCtrl) - sizeof(InstancePtr->config)), + 0U, (u32)(sizeof(FSecRndCtrl) - sizeof(InstancePtr->config))); + if (status != FSEC_RND_SUCCESS) { + goto set_err; + } + + InstancePtr->state = FSECRND_UNINITIALIZED; + status = FSEC_RND_SUCCESS; + +set_err: + if (status != FSEC_RND_SUCCESS) { + InstancePtr->state = FSECRND_ERROR; + } + +end: + return status; +} + +/*************************************************************************************************/ +/** + * @brief + * This API is used to reset the TRNG. + * + * @param InstancePtr is a pointer to the FSecRndCtrl instance to be worked on. + * + * @return None. + * + **************************************************************************************************/ +static void FSecRnd_Reset(const FSecRndCtrl *InstancePtr) +{ + FSecRnd_WriteReg(InstancePtr->config.base_address, FSEC_TRNG_RESET, FSEC_TRNG_RESET_VAL_MASK); + FDriverMdelay(10U); + FSecRnd_WriteReg(InstancePtr->config.base_address, FSEC_TRNG_RESET, 0U); + FSecRnd_SoftReset(InstancePtr); +} + +/*************************************************************************************************/ +/** + * @brief + * This API is used to issue soft reset the TRNG (FSECRNDCTRL.PRNGsrst) + * + * @param InstancePtr is a pointer to the FSecRndCtrl instance to be worked on. + * + * @return None. + * + **************************************************************************************************/ +static void FSecRnd_SoftReset(const FSecRndCtrl *InstancePtr) +{ + FSecRnd_RMW32(InstancePtr->config.base_address, FSEC_TRNG_CTRL, FSEC_TRNG_CTRL_PRNGSRST_MASK, FSEC_TRNG_CTRL_PRNGSRST_MASK); + FDriverMdelay(10U); + FSecRnd_RMW32(InstancePtr->config.base_address, FSEC_TRNG_CTRL, FSEC_TRNG_CTRL_PRNGSRST_MASK, 0U); +} + +/*************************************************************************************************/ +/** + * @brief + * This API is used to keep the TRNG in reset state. + * + * @param InstancePtr is a pointer to the FSecRndCtrl instance to be worked on. + * + * @return None. + * + **************************************************************************************************/ +static void FSecRnd_HoldReset(const FSecRndCtrl *InstancePtr) +{ + FSecRnd_RMW32(InstancePtr->config.base_address, FSEC_TRNG_CTRL,FSEC_TRNG_CTRL_PRNGSRST_MASK, FSEC_TRNG_CTRL_PRNGSRST_MASK); + FSecRnd_WriteReg(InstancePtr->config.base_address, FSEC_TRNG_RESET, FSEC_TRNG_RESET_VAL_MASK); + FDriverMdelay(10U); +} + +/*************************************************************************************************/ +/** + * @brief + * This is the function read collected random data is returned to calling function. + * + * @param buf is a pointer to the FSecRndCtrl fifo data. + * @param len is number of bytes . + * + * @return + * - i is step len + * + *************************************************************************************************/ + +static inline int FSecRnd_Read(u8 *buf, size_t len) +{ + size_t i = 0, step; + u32 val; + + for (i = 0; i < len; i += step) { + step = (len - i) > 4 ? 4 : (len - i); + val = FtIn32(FSEC_TRNG_BASEADDR + FSEC_RN_DATA_WORD_OFFSET(i >> 2)); + memcpy((buf + i), &val, step); + } + + return i; +} + + +/*************************************************************************************************/ +/** + * @brief + * This is the function in which actually generation of random data is started and collected + * random data is returned to calling function. + * + * @param InstancePtr is a pointer to the FSecRndCtrl instance to be worked on. + * @param rand_gen_buf points to the address of the buffer in to which the random data + * generated has to be copied. + * @param num_of_rand_bytes is number of bytes to be collected. + * + * @return + * - FSEC_RND_SUCCESS if Random number collection was successful. + * - FSECRND_ERROR_GENERATE_TIMEOUT if timeout occurred waiting for QCNT to become 4. + * - FSECRND_ERROR_CATASTROPHIC_DTF if DTF bit asserted in STATUS register. + * - FSECRND_ERROR_CATASTROPHIC_DTF_SW if DTF error detected in software. + * - FSECRND_ERROR_GLITCH if error caused due to glitch conditions. + * + * @note + * In case of entropy data collection mode this function utilizes the additional 4 words of + * entropy_data buffer when num_of_rand_bytes is not 32byte aligned. + * + *************************************************************************************************/ + +static s32 FSecRnd_CollectRandData(FSecRndCtrl *InstancePtr, u32 *rand_gen_buf, u32 num_of_rand_bytes) +{ + volatile s32 status = FSEC_RND_FAILURE; + volatile u32 CtrlVal; + size_t offset = 0; + size_t step_len = 0; + u32 dlen = num_of_rand_bytes; + u32 INTR_STATUS; + u32 fill_flag; + u32 count; + + /* Calculate number of generates */ + if (InstancePtr->usr_cfg.pred_resistance_en == TRUE) + { + CtrlVal = CtrlVal & ~FSEC_RND_MODE_GEN; + } + + if ( FSEC_TRNG_AUTO_TRIGGER != FSEC_TRNG_AUTO_TRIGGER) { + while (offset < dlen) { + FtOut32(FSEC_TRNG_BASEADDR + RN_POOL_OFFSET + FSEC_RN_POOL_FIFO_SELECT_ADDR_OFFSET,FSEC_TRNG_AUTO_TRIGGER); + step_len = dlen - offset; + if (step_len > FSEC_TRNG_POOL_SIZE) + step_len = FSEC_TRNG_POOL_SIZE; + + FSecRnd_Read((u8 *)rand_gen_buf + offset, step_len); + offset += step_len; + } + } else { + while (offset < dlen) + { + step_len = (dlen - offset) > FSEC_TRNG_POOL_SIZE ? FSEC_TRNG_POOL_SIZE : dlen - offset; + FtOut32(FSEC_TRNG_BASEADDR + RN_POOL_OFFSET + FSEC_RN_POOL_FIFO_SELECT_ADDR_OFFSET,FSEC_TRNG_MANAL_TRIGGER); + status = FSecRND_SecureOut32(FSEC_TRNG_BASEADDR + RN_POOL_OFFSET + FSEC_RN_POOL_CTL_OFFSET,FSEC_RN_POOL_FILL_REQ | FSEC_TRNG_CLOCK_ENABLE); + if ((status != FSEC_RND_SUCCESS) ) + { + status = (s32)FSECRND_ERROR_CATASTROPHIC_DTF_SW; + goto end; + } + count = 0; + do + { + // get int state + INTR_STATUS = FtIn32(FSEC_TRNG_BASEADDR + RN_POOL_OFFSET + FSEC_RN_POOL_INTR_OFFSET); + fill_flag = INTR_STATUS & FSEC_RN_POOL_FILL_REQ; + if (fill_flag) + { + FSecRnd_Read((u8 *)rand_gen_buf + offset, step_len); + FtOut32(FSEC_TRNG_BASEADDR + RN_POOL_OFFSET + FSEC_RN_POOL_INTR_OFFSET,INTR_STATUS); + break; + } + FDriverMdelay(3U); + count++; + if (count > 10000) + { + f_printf("Wait timeout for trng count: 0x%08x \n\r", count); + return -1; + } + } while (1); + offset += step_len; + } + } + + status = FSEC_RND_SUCCESS; + +end: + return status; +} + + +/*************************************************************************************************/ +/** + * @brief + * This is the actual reseed function. This function will be called by FSecRnd_ReseedInternal and during + * Generate operation. Instantiation too calls this function. + * + * @param InstancePtr is a pointer to the FSecRndCtrl instance to be worked on. + * @param ext_seed_ptr points to the byte array containing external seed. This shall be NULL + * for HRNG case. + * @param pers_str_ptr points to Personalization string (which is recommended) in addition to + * seed. This is needed only during Instantiation. + * @param df_len_mul is DF Length multiplier used to determine number of bits on the input of + * + * @return + * - FSEC_RND_SUCCESS if Reseed was successful. + * - FSECRND_ERROR_CERTF_SW_A5_PATTERN if entropy source outputs all 5s or all As. + * - FSECRND_ERROR_CPY_RESEED if error encountered during seed copy. + * - FSECRND_ERROR_RESEED_TIMEOUT if timeout occurred waiting for done of reseeding. + * - FSECRND_ERROR_CERTF if CTF flag is set in STATUS register. + * - FSECRND_ERROR_GLITCH if error caused due to glitch conditions. + * - Other error codes from the called functions as defined in XTrngpsv_ErrorCodes. + * + **************************************************************************************************/ +static s32 FSecRnd_ReseedInternal(FSecRndCtrl *InstancePtr, const u8 *ext_seed_ptr, u8 *pers_str_ptr, u32 df_len_mul) +{ + volatile s32 status = FSEC_RND_FAILURE; + volatile s32 statusTemp = FSEC_RND_FAILURE; + volatile u32 regval; + volatile u32 regval_tmp; + u8 EntropyOutput[FSEC_RND_ENTROPY_SEED_LEN_BYTES]; + const volatile u8 *seed_ptr = NULL; + volatile FSecRndCtrl_Mode Mode = FSECRND_HRNG; + + InstancePtr->trng_stats.rand_bytes_reseed = 0; + InstancePtr->trng_stats.elapsed_seed_life = 0; + + /* Determine actual size (in bytes) of seed based on DF mode or non-DF mode */ + if (InstancePtr->usr_cfg.df_disable == FSEC_RND_TRUE) { + InstancePtr->entropy_size = FSEC_RND_SEED_LEN_BYTES; + } + else { + InstancePtr->entropy_size = (df_len_mul + 1U) * FSEC_BYTES_PER_BLOCK; + } + + Mode = InstancePtr->usr_cfg.mode; + if (InstancePtr->usr_cfg.df_disable == FSEC_RND_TRUE) { + if ((Mode == FSECRND_HRNG) || (Mode == FSECRND_HRNG)) { + + status = FSecRND_SecureOut32(InstancePtr->config.base_address + FSEC_TRNG_OSC_EN, FSEC_TRNG_OSC_EN_VAL_MASK); + if (status != FSEC_RND_SUCCESS) { + status = (s32)FSECRND_ERROR_GLITCH; + goto set_err; + } + + /* Provide soft reset before configuring the entropy mode */ + FSecRnd_SoftReset(InstancePtr); + + status = FSEC_RND_FAILURE; + status = FSecRND_SecureOut32(InstancePtr->config.base_address + FSEC_TRNG_CTRL, + FSEC_TRNG_CTRL_EUMODE_MASK | FSEC_TRNG_CTRL_TRSSEN_MASK); + if (status != FSEC_RND_SUCCESS) { + status = (s32)FSECRND_ERROR_GLITCH; + goto set_err; + } + + + FSEC_TEMPORAL_CHECK(set_err, status, FSecRnd_CollectRandData, + InstancePtr, (u32*)EntropyOutput, FSEC_RND_ENTROPY_SEED_LEN_BYTES); + + FSEC_TEMPORAL_IMPL(status, statusTemp, FSecRnd_CheckSeedPattern, + EntropyOutput, FSEC_RND_ENTROPY_SEED_LEN_BYTES); + + if ((status != FSEC_RND_SUCCESS) || (statusTemp != FSEC_RND_SUCCESS)) { + status = (s32)FSECRND_ERROR_CERTF_SW_A5_PATTERN; + goto set_err; + } + + seed_ptr = (u8*)EntropyOutput; + + } + else if (InstancePtr->usr_cfg.mode == FSECRND_DRNG) { + seed_ptr = ext_seed_ptr; + } + else { + /* for MISRA-C */ + seed_ptr = NULL; + } + + /* Program TRNG_EXT_SEED and TRNG_PER_STRNG registers based on the parameters + * passed. + */ + + status = FSEC_RND_FAILURE; + status = FSecRnd_WriteRegs(InstancePtr, FSEC_TRNG_EXT_SEED_0, + FSEC_RND_SEED_LEN, (const u8*)seed_ptr); + if (status != FSEC_RND_SUCCESS) { + goto set_err; + } + + if (pers_str_ptr != NULL) { + /* Loading personalization is used in both DRNG and HRNG cases */ + status = FSEC_RND_FAILURE; + status = FSecRnd_WriteRegs(InstancePtr, FSEC_TRNG_PER_STRNG_0, FSEC_RND_PERS_STR_LEN, pers_str_ptr); + if (status != FSEC_RND_SUCCESS) { + goto set_err; + } + } + } + else { /* DF Mode */ + + /* Fill the DFInput datastructure with 0s and copy the external seed (for DRNG) + * or collect the entropy output data to the input to the DF operation. + */ + status = FSecRND_SMemSet((u8*)&InstancePtr->df_input, (u32)sizeof(InstancePtr->df_input), 0U, + (u32)sizeof(InstancePtr->df_input)); + if (status != FSEC_RND_SUCCESS) { + goto set_err; + } + + if (InstancePtr->usr_cfg.mode == FSECRND_HRNG) { + + /* This actually is configuration for PTRNG mode (not for reseed) to + * collect random output data from entropy source. + */ + + status = FSEC_RND_FAILURE; + status = FSecRND_SecureOut32(InstancePtr->config.base_address + FSEC_TRNG_OSC_EN, FSEC_TRNG_OSC_EN_VAL_MASK); + if (status != FSEC_RND_SUCCESS) { + status = (s32)FSECRND_ERROR_GLITCH; + goto set_err; + } + + /* Provide soft reset before configuring the entropy mode */ + FSecRnd_SoftReset(InstancePtr); + + FSecRnd_WriteReg(InstancePtr->config.base_address, FSEC_TRNG_CTRL, + FSEC_TRNG_CTRL_EUMODE_MASK | FSEC_TRNG_CTRL_TRSSEN_MASK); + + /* FSECRNDCTRL.PRNGstart will be asserted in FSecRnd_CollectRandData() */ + + FSEC_TEMPORAL_CHECK(set_err, status, FSecRnd_CollectRandData, + InstancePtr, (u32*)InstancePtr->df_input.entropy_data, InstancePtr->entropy_size); + + FSEC_TEMPORAL_IMPL(status, statusTemp, FSecRnd_CheckSeedPattern, + InstancePtr->df_input.entropy_data, InstancePtr->entropy_size); + + if ((status != FSEC_RND_SUCCESS) || (statusTemp != FSEC_RND_SUCCESS)) { + status = (s32)FSECRND_ERROR_CERTF_SW_A5_PATTERN; + goto set_err; + } + } + else if (InstancePtr->usr_cfg.mode == FSECRND_DRNG) { + status = FSEC_RND_FAILURE; + status = FSecRND_SecureMemCpy(InstancePtr->df_input.entropy_data, + InstancePtr->entropy_size, ext_seed_ptr, + InstancePtr->entropy_size); + if (status != FSEC_RND_SUCCESS) { + status = (s32)FSECRND_ERROR_CPY_RESEED; + goto set_err; + } + } + else { + /* For MISRA-C */ + } + FSEC_TEMPORAL_CHECK(set_err, status, FSecRnd_WriteRegs, InstancePtr, FSEC_TRNG_EXT_SEED_0, FSEC_RND_SEED_LEN, InstancePtr->df_output); + } + + /* select Reseed operation, and configure for external seed */ + status = FSEC_RND_FAILURE; + status = FSecRND_SecureOut32(InstancePtr->config.base_address + FSEC_TRNG_CTRL, + FSEC_RND_MODE_RESEED | FSEC_TRNG_CTRL_PRNGXS_MASK); + if (status != FSEC_RND_SUCCESS) { + status = (s32)FSECRND_ERROR_GLITCH; + goto set_err; + } + + FSecRnd_RMW32(InstancePtr->config.base_address, FSEC_TRNG_CTRL, FSEC_TRNG_CTRL_PRNGSTART_MASK, + FSEC_TRNG_CTRL_PRNGSTART_MASK); + + FSEC_TEMPORAL_IMPL(regval, regval_tmp, FSecRnd_ReadReg, + InstancePtr->config.base_address, FSEC_TRNG_STATUS); + if (((regval & FSEC_TRNG_STATUS_CERTF_MASK) == FSEC_TRNG_STATUS_CERTF_MASK) + || ((regval_tmp & FSEC_TRNG_STATUS_CERTF_MASK) == FSEC_TRNG_STATUS_CERTF_MASK)) { + status = (s32)FSECRND_ERROR_CERTF; + goto set_err; + } + + + FSecRnd_RMW32(InstancePtr->config.base_address, FSEC_TRNG_CTRL, FSEC_TRNG_CTRL_PRNGSTART_MASK, 0U); + + status = FSEC_RND_SUCCESS; + +set_err: + if (status != FSEC_RND_SUCCESS) { + InstancePtr->state = FSECRND_ERROR; + } + + return status; +} + + +/*************************************************************************************************/ +/** + * @brief + * Write to the register + * + * Write a byte array init_buf as a sequence of words into an array of register locations starting + * with start_reg_offset. The first byte from init_buf is stored in last byte of target register, + * the second byte to last but one byte of target register.. and so on. If init_buf is NULL, the + * target registers are filled with all 0s. + * + * @param InstancePtr is a pointer to the FSecRndCtrl instance to be + * worked on + * @param start_reg_offset contains the offset from the base address of the + * device from where register writes to be done + * @param num_regs is number of registers to be programmed + * @param init_buf is the source of buffer from where data will be written to registers. + * + * @return + * - FSEC_RND_SUCCESS if Write to Registers is successful + * - FSECRND_ERROR_GLITCH if write and read values are different + * - FSEC_RND_FAILURE if any other failure + * + **************************************************************************************************/ +static s32 FSecRnd_WriteRegs(const FSecRndCtrl *InstancePtr, u32 start_reg_offset, u32 num_regs, + const u8 *init_buf) +{ + volatile u32 Index; + u32 count; + u32 regval; + u32 offset; + volatile s32 status = FSEC_RND_FAILURE; + + for (Index = 0U; Index < num_regs; ++Index) { + if (init_buf != NULL) { + regval = 0U; + for (count = 0U; count < FSEC_RND_BYTES_PER_REG; ++count) { + regval = (regval << 8U) + | (init_buf[(Index * FSEC_RND_BYTES_PER_REG) + count]); + } + offset = (start_reg_offset + + ((FSEC_RND_NUM_INIT_REGS - 1U - Index) * FSEC_RND_BYTES_PER_REG)); + FSecRnd_WriteReg(InstancePtr->config.base_address, offset, regval); + } + else { + FSecRnd_WriteReg(InstancePtr->config.base_address, + (start_reg_offset + (Index * FSEC_RND_BYTES_PER_REG)), 0U); + } + } + + if (Index != num_regs) { + status = (s32)FSECRND_ERROR_GLITCH; + goto end; + } + + status = FSEC_RND_SUCCESS; + +end: + return status; +} + +/*************************************************************************************************/ +/** + * @brief + * Checks the value of seed against certain patterns, which are invalid. + * + * @param entropy_data is a pointer to the data from where data has to be checked against. + * @param entropy_length is number of bytes for which patterns has to be checked. + * + * @return None. + * + * @note 0xAAAAAAAA and 0x55555555 are treated as invalid. + * + **************************************************************************************************/ +static s32 FSecRnd_CheckSeedPattern(u8 *entropy_data, u32 entropy_length) +{ + s32 status = FSEC_RND_FAILURE; + u32 Index; + u32 entropy_lengthInWords = entropy_length / 4U; + + for (Index = 0U; Index < entropy_lengthInWords; Index++) { + if ((*((u32*)entropy_data + Index) == 0xAAAAAAAAU) + || (*((u32*)entropy_data + Index) == 0x55555555U)) { + goto end; + } + } + status = FSEC_RND_SUCCESS; +end: + return status; +} + +/*************************************************************************************************/ +/** + * @brief + * Read from the register. + * + * @param baseaddress cntains the base address of the device. + * @param reg_offset contains the offset from the base address of the device. + * + * @return The value read from the register. + * + **************************************************************************************************/ +static inline u32 FSecRnd_ReadReg(uintptr_t baseaddress, u32 reg_offset) +{ + return FtIn32((uintptr_t)(baseaddress + reg_offset)); +} + +/**************************************************************************************************/ +/** + * @brief + * Write to the register. + * + * @param baseaddress contains the base address of the device. + * @param reg_offset contains the offset from the base address of the device. + * @param reg_value is the value to be written to the register. + * + * @return None. + * + **************************************************************************************************/ +static inline void FSecRnd_WriteReg(uintptr_t baseaddress, u32 reg_offset, u32 reg_value) +{ + FtOut32((uintptr_t)(baseaddress + reg_offset), reg_value); +} + +/**************************************************************************************************/ +/** + * @brief + * Read-Modify-Write register. + * + * @param baseaddress contains the base address of the device. + * @param regoffset contains the offset from the base address of the device. + * @param reg_mask indicates the bits to be modified. + * @param reg_value is the value to be written to the register. + * + * @return None. + * + **************************************************************************************************/ +static inline void FSecRnd_RMW32(uintptr_t baseaddress, u32 regoffset, u32 reg_mask, u32 reg_value) +{ + FSecRND_UtilRMW32(((u32)baseaddress + regoffset), reg_mask, reg_value); +} + + + diff --git a/drivers/sec/rnd/fsec_rnd.h b/drivers/sec/rnd/fsec_rnd.h new file mode 100644 index 000000000..895a2f810 --- /dev/null +++ b/drivers/sec/rnd/fsec_rnd.h @@ -0,0 +1,238 @@ +/* + * Copyright (C) 2025, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: fsec_rnd.h + * Created Date: 2025-07-04 17:37:36 + * Last Modified: 2025-07-21 16:30:07 + * Description: This file is for secure + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + * v1.0 kangkaiping 2025/07/09 first release + */ + + +#ifndef FSEC_RND_H +#define FSEC_RND_H + +/*************************************** Include Files *******************************************/ +#include "ftypes.h" +#include "string.h" +#include "ferror_code.h" +#include "fio.h" +#include "fprintf.h" +#include "fsleep.h" +#include "fsec_rnd_util.h" +#include "fsec_rnd_hw.h" +#include "fdrivers_port.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************ Constant Definitions ***************************************/ +#define FSECRND_SUCCESS FT_SUCCESS +#define FSECRND_FAILURE FT_MAKE_ERRCODE(ErrModBsp, ErrSec, 0) +#define FSECRND_ERR_TIMEOUT FT_MAKE_ERRCODE(ErrModBsp, ErrSec, 1) +#define FSECRND_ERR_GLITCH FT_MAKE_ERRCODE(ErrModBsp, ErrSec, 2) +#define FSECRND_ERR_INVALID_PARAM FT_MAKE_ERRCODE(ErrModBsp, ErrSec, 3) + +#define FSEC_RND_STRENGTH_LEN 8U /**< Security strength in Words */ +#define FSEC_RND_PERS_STR_LEN 12U /**< Personalization string length in dwords */ +#define FSEC_RND_PERS_STR_LEN_BYTES 48U /**< Personalization string length in bytes */ +#define FSEC_RND_SEED_LEN 12U /**< Seed length in dwords */ +#define FSEC_RND_SEED_LEN_BYTES 48U /**< Seed length in bytes */ +#define FSEC_RND_GEN_LEN_BYTES 160//32U /**< No. of bytes per Generate request */ +#define FSEC_RND_BUF_LEN 4U /**< No. of 32 bit words */ +#define FSEC_BYTES_PER_BLOCK 16U /**< No. of bytes per block, equivalent to 128 bits*/ + +#define FSEC_RND_SUCCESS (s32)FT_SUCCESS /**< SUCCESS definition of FSECRND driver */ +#define FSEC_RND_FAILURE (s32)1 /*FSECRND_FAILURE*/ /**< FAILURE definition of FSECRND driver */ + +#define FSEC_RND_TRUE (u32)TRUE /**< Boolean TRUE definition of FSECRND driver */ +#define FSEC_RND_FALSE (u32)FALSE /**< Boolean FALSE definition of FSECRND driver */ + +#define FSEC_RND_BURST_SIZE 16U /**< QCNT of 4 * 4 bytes (reg width)= 16 bytes */ +#define FSEC_RND_NUM_INIT_REGS 12U /**< No. of SEED and PERS STRING registers each */ +#define FSEC_RND_BYTES_PER_REG 4U /**< Number of bytes register (i.e. 32/8) */ +#define FSEC_RND_ENTROPY_SEED_LEN_BYTES 64U /**< Entropy SEED length in terms of security strength */ +#define FSEC_RND_SEC_STRENGTH_SHIFT 5U /**< Shift value in terms of security strength */ +#define FSEC_RND_MAX_QCNT_MASK 0x800U /**< Mask value for maximum QCNT (i.e 4U << 9U) */ +#define FSEC_RND_WORD_ALIGN_MASK 0x03U /**< Mask to check whether the address is word aligned */ + +#define FSEC_RND_RESEED_TIMEOUT 15000U /**< Reseed timeout in micro-seconds */ +#define FSEC_RND_GENERATE_TIMEOUT 8000U /**< Generate timeout in micro-seconds */ + +#define FSEC_RND_MODE_RESEED 0U /**< PRNG in Reseed mode */ +#define FSEC_RND_MODE_GEN FSEC_TRNG_CTRL_PRNGMODE_MASK /**< PRNG in Generate mode */ + +#define FSEC_RND_MIN_SEEDLIFE 1U /**< Minimum seed life */ +#define FSEC_RND_MAX_SEEDLIFE 0x1000000000000U /**< Maximum seed life 2^^48 */ +#define FSEC_RND_MIN_DFLENMUL 2U /**< Minimum DF Length Multiplier.This assumes + additional multiplier of 1 for nonce */ +#define FSEC_RND_MAX_DFLENMUL 9U /**< Maximum DF Length Multiplier */ + +/* Error codes definition FSECRND_ERROR_*/ +typedef enum { + FSECRND_ERROR_INVALID_PARAM = 0x10, /**< 0x10 */ + FSECRND_ERROR_INVALID_STATE, /**< 0x11 */ + FSECRND_ERROR_UNNECESSARY_PARAM, /**< 0x12 */ + FSECRND_ERROR_GLITCH, /**< 0x13 */ + + /* Error codes from Instantiation operation */ + FSECRND_ERROR_NOT_UNINSTANTIATED = 0x20, /**< 0x20 */ + FSECRND_ERROR_INVALID_USRCFG_MODE, /**< 0x21 */ + FSECRND_ERROR_INVALID_USRCFG_SEEDLIFE, /**< 0x22 */ + FSECRND_ERROR_INVALID_USRCFG_PREDRES, /**< 0x23 */ + FSECRND_ERROR_NO_SEED_INSTANTIATE, /**< 0x24 */ + FSECRND_ERROR_INVALID_USRCFG_DFDIS, /**< 0x25 */ + FSECRND_ERROR_INVALID_USRCFG_DFLENMUL, /**< 0x26 */ + FSECRND_ERROR_USRCFG_CPY, /**< 0x27 */ + FSECRND_ERROR_INVALID_USRCFG_PERSPRES, /**< 0x28 */ + FSECRND_ERROR_INVALID_USRCFG_SEEDPRES, /**< 0x29 */ + FSECRND_ERROR_UNNECESSARY_PARAM_INSTANTIATE, /**< 0x2A */ + + /* Error codes from Reseed operation*/ + FSECRND_ERROR_NO_SEED = 0x30, /**< 0x30 */ + FSECRND_ERROR_SEED_INVALID_MODE, /**< 0x31 */ + FSECRND_ERROR_SAME_SEED, /**< 0x32 */ + FSECRND_ERROR_INVALID_RESEED_DFLENMUL, /**< 0x33 */ + FSECRND_ERROR_CERTF, /**< 0x34 */ + FSECRND_ERROR_CERTF_SW_A5_PATTERN, /**< 0x35 */ + FSECRND_ERROR_RESEED_TIMEOUT, /**< 0x36 */ + FSECRND_ERROR_CPY_RESEED, /**< 0x37 */ + + /* Error codes from Generate operation*/ + FSECRND_ERROR_INSUFFICIENT_RANDBUF = 0x40, /**< 0x40 */ + FSECRND_ERROR_PREDRES_MISMATCH, /**< 0x41 */ + FSECRND_ERROR_RESEEDING_REQUIRED, /**< 0x42 */ + FSECRND_ERROR_RESEED_REQD_PREDRES, /**< 0x43 */ + FSECRND_ERROR_INVALID_GEN_PREDRES, /**< 0x44 */ + FSECRND_ERROR_CATASTROPHIC_DTF, /**< 0x45 */ + FSECRND_ERROR_CATASTROPHIC_DTF_SW, /**< 0x46 */ + FSECRND_ERROR_GENERATE_TIMEOUT, /**< 0x47 */ + FSECRND_ERROR_INVALID_RANDBUF_ADDR, /**< 0x48 */ + + /* Derivative Function related Error codes */ + FSECRND_ERROR_DF_CPY = 0x50, /**< 0x50 */ + FSECRND_ERROR_DF_SETUP_KEY_FAILED, /**< 0x51 */ + FSECRND_ERROR_DF_MEMSET,/**< 0x52 */ + FSECRND_ERROR_DF_MEMMOVE,/**< 0x53 */ + + /* Health Test and KAT related Error codes */ + FSECRND_ERROR_HEALTHTEST_INVALID_MODE = 0x60, /**< 0x60 */ + FSECRND_ERROR_KAT_MISMATCH, /**< 0x61 */ + FSECRND_ERROR_USRCFG_CPY_KAT, /**< 0x62 */ +} FSecRndCtrl_ErrorCodes; + +/************************************** Type Definitions *****************************************/ + +/* This typedef contains enumeration of different states of the FSECRND driver */ +typedef enum { + FSECRND_UNINITIALIZED = 0, /**< 0 - Driver is not in Initialized state */ + FSECRND_HEALTHY, /**< 1 - Driver is not in Healthy state */ + FSECRND_ERROR, /**< 3 - Driver encountered error condition */ + FSECRND_CATASTROPHIC /**< 3 - Driver encountered catastrophic error */ +} FSecRndCtrl_State; + +/* This typedef contains modes of operation of the FSECRND driver */ +typedef enum { + FSECRND_HRNG = 0, /**< 0 - Hybrid RNG */ + FSECRND_DRNG, /**< 1 - Deterministic RNG */ + FSECRND_PTRNG /**< 2 - Physical True RNG */ +} FSecRndCtrl_Mode; + +/* This typedef contains configuration information for the device */ +typedef struct { +#ifndef SDT + u16 device_id; /**< DeviceId is the unique ID of the * device */ +#else + char *name; +#endif + uintptr_t base_address; /**< BaseAddress is the physical base address * of the device's registers */ +} FSecRndConig; + +/* This typedef contains config information for the device, which is used during Instantiation */ +typedef struct { + FSecRndCtrl_Mode mode; /**< Mode of the TRNG - DRBG/PTRNG/HRNG */ + u64 seed_life; /**< #of Generate requests per seed (128 - 2^48)*/ + u32 pred_resistance_en; /**< Enables Prediction Resistance capability */ + u32 pers_str_present; /**< Used to indicate if Personalization string is present. FALSE => no personalization string */ + u32 pers_string[FSEC_RND_PERS_STR_LEN]; /**< 384 bits of Pers. String */ + u32 init_seed_present; /**< Used to indicate if InitSeed is present. FALSE => no InitSeed */ + u32 init_seed[40U]; /**< Initial Seed + nonce of 128 bits, actual seed+nonce is of (DFLenMul+1)*128 bits */ + u32 df_disable; /**< Setting this to TRUE, disables the Derivative Function; default is enable */ + u32 df_len_mul; /**< Multiplier used to determine num of bits on the input of the DF construct */ +} FSecRndUsrConig; + +/* This typedef contains statistics of the FSECRND driver */ +typedef struct { + u64 rand_bytes; /**< Number of random bytes provided since instantiate */ + u64 rand_bytes_reseed; /**< Random bytes generated after last reseed */ + u64 elapsed_seed_life; /**< Generate requests done after last reseed */ +} FSecRndStats; + +/* This typedef contains the format in which the Block Cipher (DF) algorithm + * expects the information + */ +typedef struct { + u32 iv_counter[4U]; /**< Counter/seq number */ + u32 input_len; /**< length indicating actual entropy data length + pers string length in bytes*/ + u32 post_df_Len; /**< Length of entropy data (e.g. seed, random data) post DF in bytes */ + u8 entropy_data[1024]; /**< Input Entropy data */ + u8 pers_string[FSEC_RND_PERS_STR_LEN_BYTES];/**< Personalization String */ + u8 pad_data[8U]; /**< Padding to make structure, multiple of 16Bytes */ +} FSecRndDFInput; + +/* This typedef contains main instance of the FSECRND driver */ +typedef struct { + FSecRndConig config; /**< Hardware Configuration */ + FSecRndUsrConig usr_cfg; /**< Configuration from the user */ + FSecRndStats trng_stats; /**< FSECRND Statistics */ + FSecRndCtrl_State state; /**< takes one of the possible values indicated by FSecRndCtrl_State */ + u32 rand_bit_buf[FSEC_RND_BUF_LEN]; /**< buffer of random bits to minimize latency */ + u32 entropy_size; /**< actual size (in bytes) of seed */ + FSecRndDFInput df_input; /**< data structure which is input to the DF operation */ + u8 df_output[FSEC_RND_SEED_LEN_BYTES]; /**< Output of the DF operation (contains updated seed or random number) */ +} FSecRndCtrl; +/************************************ Variable Definitions ***************************************/ +extern FSecRndConig FSecRndConfigTable[]; + +/*************************** Macros (Inline Functions) Definitions *******************************/ + +/************************************ Function Prototypes ****************************************/ + +/* Required functions in fsec_rnd.c */ +#ifndef SDT +FSecRndConig *FSecRndLookupConfig(u16 DeviceId); +#else +FSecRndConig *FSecRndLookupConfig(uintptr_t BaseAddress); +#endif +s32 FSecRndCfgInitialize(FSecRndCtrl *InstancePtr, const FSecRndConig *cfgptr,uintptr_t effective_addr); +s32 FSecRndInstantiate(FSecRndCtrl *InstancePtr, const FSecRndUsrConig *configur_values); +s32 FSecRndReseed(FSecRndCtrl *InstancePtr, const u8 *ext_seed_ptr, u32 df_len_mul); +s32 FSecRndGenerate(FSecRndCtrl *InstancePtr, u8 *rand_buf_ptr, u32 rand_buf_size, u8 pred_resistance_en, u32 rand_size); +s32 FSecRndUninstantiate(FSecRndCtrl *InstancePtr); + +/* Functions in fsec_rnd_debug.c */ +s32 FSecRndRunHealthTest(FSecRndCtrl *InstancePtr); + +#ifdef __cplusplus +} +#endif + +#endif /*FSEC_RND_H*//* end of protection macro */ diff --git a/drivers/sec/rnd/fsec_rnd_debug.c b/drivers/sec/rnd/fsec_rnd_debug.c new file mode 100644 index 000000000..f1dac1bc0 --- /dev/null +++ b/drivers/sec/rnd/fsec_rnd_debug.c @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2025, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: fsec_rnd_debug.c + * Created Date: 2025-07-07 19:32:16 + * Last Modified: 2025-07-21 16:31:36 + * Description: This file is for secure + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + * v1.0 kangkaiping 2025/07/09 first release + */ + + +/*************************************** Include Files *******************************************/ + +#include "fsec_rnd.h" + +/************************************ Constant Definitions ***************************************/ +/** + * @name Constant definitions for parameters used for Health and KAT tests + * @{ + */ +/** + * Constant definitions for Health and KAT tests. + */ +#define HEALTH_TEST_SEEDLIFE 10U +#define HEALTH_TEST_DFLENMUL 7U + + + +/************************************** Type Definitions *****************************************/ + +/*************************** Macros (Inline Functions) Definitions *******************************/ + +/************************************ Function Prototypes ****************************************/ + +/************************************ Variable Definitions ***************************************/ + +/*************************************************************************************************/ +/** + * @param InstancePtr is a pointer to the FSecRndCtrl instance to be worked on. + * + * @return + * - FSEC_RND_SUCCESS if Health tests are successfully run. + * - FSECRND_ERROR_INVALID_PARAM if invalid parameter passed to this function (OR) + * other error codes from the called functions as defined in ErrorCodes. + * + *************************************************************************************************/ + +s32 FSecRndRunHealthTest(FSecRndCtrl *InstancePtr) +{ + volatile s32 status = FSEC_RND_FAILURE; + + FSecRndUsrConig usr_cfg_tests; + + if (InstancePtr == NULL) { + status = (s32)FSECRND_ERROR_INVALID_PARAM; + goto end; + } + + status = FSecRND_SMemSet((u8*)&usr_cfg_tests, (u32)sizeof(usr_cfg_tests), 0U, (u32)sizeof(usr_cfg_tests)); + if (status != FSEC_RND_SUCCESS) { + goto set_err; + } + + /* Populate user config parameters of TRNGPSV driver */ + + usr_cfg_tests.mode = FSECRND_HRNG; + usr_cfg_tests.seed_life = HEALTH_TEST_SEEDLIFE; + usr_cfg_tests.pred_resistance_en = FSEC_RND_FALSE; + usr_cfg_tests.df_disable = FSEC_RND_FALSE; + usr_cfg_tests.df_len_mul = HEALTH_TEST_DFLENMUL; + usr_cfg_tests.pers_str_present = FSEC_RND_FALSE; + usr_cfg_tests.init_seed_present = FSEC_RND_FALSE; + + /* Invoke Instantiate (which includes reseed) operation */ + status = FSecRndInstantiate(InstancePtr, &usr_cfg_tests); + if (status != FSEC_RND_SUCCESS) { + goto set_err; + } + + /* status Reset */ + status = FSEC_RND_FAILURE; + + /* Uninstantiate driver instance after Health Tests */ + status = FSecRndUninstantiate(InstancePtr); + +set_err: + if (status != FSEC_RND_SUCCESS) { + InstancePtr->state = FSECRND_ERROR; + } + +end: + return status; +} + + diff --git a/drivers/sec/rnd/fsec_rnd_g.c b/drivers/sec/rnd/fsec_rnd_g.c new file mode 100644 index 000000000..11495f5df --- /dev/null +++ b/drivers/sec/rnd/fsec_rnd_g.c @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2025, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: fsec_rnd_g.c + * Created Date: 2025-07-04 17:37:36 + * Last Modified: 2025-07-18 09:28:44 + * Description: This file is for secure + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + * v1.0 kangkaiping 2025/07/09 first release + */ +/* - This file contains a configuration table that specifies the configuration +- 驱动全局变量定义,包括静态配置参数 */ + +/***************************** Include Files *********************************/ +#include "fparameters.h" +#include "fsec_rnd.h" + +/************************** Constant Definitions *****************************/ + +/**************************** Type Definitions *******************************/ + +/***************** Macros (Inline Functions) Definitions *********************/ + +/************************** Function Prototypes ******************************/ + +/************************** Variable Prototypes ******************************/ + +/* +* The configuration table for devices +*/ + +FSecRndConig FSecRndConfigTable[FSEC_NUM_INSTANCES] = +{ + { + FSEC_TRNG_DEVICE_ID, + FSEC_TRNG_BASEADDR + } +}; +/** @} */ diff --git a/drivers/sec/rnd/fsec_rnd_hw.h b/drivers/sec/rnd/fsec_rnd_hw.h new file mode 100644 index 000000000..08454b95d --- /dev/null +++ b/drivers/sec/rnd/fsec_rnd_hw.h @@ -0,0 +1,95 @@ +/* + * Copyright (C) 2025, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: fsec_rnd_hw.h + * Created Date: 2025-07-04 17:37:36 + * Last Modified: 2025-07-18 11:52:49 + * Description: This file is for secure + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + * v1.0 kangkaiping 2025/07/09 first release + */ + + +#ifndef FSECRND_HW_H_ +#define FSECRND_HW_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/***************************** Include Files *****************************************************/ + + + +/************************** Constant Definitions *************************************************/ + +#define FSEC_NUM_INSTANCES 1 +/* Definitions for peripheral FSEC_TRNG_BASEADDR */ +#define FSEC_TRNG_DEVICE_ID 0 + +#define FSEC_RND_0_DEVICE_ID FSEC_TRNG_DEVICE_ID + +#define FSEC_RN_POOL_CTL_OFFSET 0x00000000U /**< TRNG control offset */ +#define FSEC_RN_POOL_STAT_OFFSET 0x00000004U +#define FSEC_RN_POOL_INTR_OFFSET 0x00000008U +#define FSEC_RN_POOL_INTR_MSK_OFFSET 0x0000000CU +#define FSEC_RN_DATA_WORD_OFFSET(i) (RN_POOL_OFFSET + 0x10 + ((i) << 2)) +#define FSEC_RN_POOL_FIFO_SELECT_ADDR_OFFSET 0x00000030U + +/* Register: FSEC_TRNG_STATUS */ +#define FSEC_TRNG_STATUS FSEC_TRNG_BASE + 0x00000004U /**< TRNG status offset */ + +#define FSEC_TRNG_STATUS_QCNT_MASK 0x00000e00U /**< TRNG QCNT mask */ +#define FSEC_TRNG_STATUS_CERTF_MASK 0x00000008U /**< TRNG CERTF mask */ +#define FSEC_TRNG_STATUS_DTF_MASK 0x00000002U /**< TRNG DTF mask */ +#define FSEC_TRNG_STATUS_DONE_MASK 0x00000001U /**< TRNG status done mask */ + +/* Register: FSEC_TRNG_CTRL */ +#define FSEC_TRNG_CTRL FSEC_TRNG_BASE + 0x00000000U/*0x00000008U*/ /**< TRNG control offset */ +#define FSEC_TRNG_CTRL_EUMODE_MASK 0x00000100U /**< Entropy data collection mode mask */ +#define FSEC_TRNG_CTRL_PRNGMODE_MASK 0x00000080U /**< Pseudo random number mode mask */ +#define FSEC_TRNG_CTRL_PRNGSTART_MASK 0x00000020U /**< PRNG start mask */ +#define FSEC_TRNG_CTRL_PRNGXS_MASK 0x00000008U /**< PRNG seed source mask */ +#define FSEC_TRNG_CTRL_TRSSEN_MASK 0x00000004U /**< True random seed source enable mask */ +#define FSEC_TRNG_CTRL_PRNGSRST_MASK 0x00000001U /**< PRNG soft reset mask */ + +/* Register: FSEC_TRNG_EXT_SEED_0 */ +#define FSEC_TRNG_EXT_SEED_0 0x00000040U /**< TRNG external seed 0 offset */ + +/* Register: FSEC_TRNG_PER_STRNG_0 */ +#define FSEC_TRNG_PER_STRNG_0 0x00000080U /**< TRNG personalization string 0 offset */ + +/* Register: FSEC_TRNG_CORE_OUTPUT */ +#define FSEC_TRNG_CORE_OUTPUT 0x000000C0U /**< TRNG core output offset */ + +/* Register: FSEC_TRNG_RESET */ +#define FSEC_TRNG_RESET 0x000000D0U /**< TRNG reset offset */ +#define FSEC_TRNG_RESET_VAL_MASK 0x00000001U /**< TRNG default reset value */ + +/* Register: FSEC_TRNG_OSC_EN */ +#define FSEC_TRNG_OSC_EN 0x000000D4U /**< TRNG oscillator enable offset */ +#define FSEC_TRNG_OSC_EN_VAL_MASK 0x00000001U /**< TRNG default oscillator enable value */ +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* FSECRND_HW_H_ */ +/** @} */ diff --git a/drivers/sec/rnd/fsec_rnd_init.c b/drivers/sec/rnd/fsec_rnd_init.c new file mode 100644 index 000000000..2c28a40d0 --- /dev/null +++ b/drivers/sec/rnd/fsec_rnd_init.c @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2025, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: fsec_rnd_init.c + * Created Date: 2025-07-07 19:30:04 + * Last Modified: 2025-07-18 10:55:26 + * Description: This file is for secure + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + * v1.0 kangkaiping 2025/07/09 first release + */ + + + +/***************************** Include Files *****************************************************/ + +#include "fsec_rnd.h" +#ifndef SDT +#include "fparameters.h" +#endif + +/************************************ Constant Definitions ***************************************/ + +/************************** Macros (Inline Functions) Definitions ********************************/ + +/************************************** Type Definitions *****************************************/ + +/************************************ Function Prototypes ****************************************/ + +/************************************ Variable Definitions ***************************************/ + +/************************************ Function Definitions ***************************************/ + +/*************************************************************************************************/ +/** + * @brief + * This function returns a reference to an FSecRndConfigTable structure based on the device_id. The return + * value will refer to an entry in the device configuration table defined in the fsec_rnd_g.c file. + * + * @param device_id is the unique device ID of the device being lookedup. + * + * @return cfgptr is FSecRndLookupConfig returns a reference to a config record in the configuration + * table (in fsec_rnd.c) corresponding to device_id, or NULL if no match is found. + * + **************************************************************************************************/ +#ifndef SDT +FSecRndConig *FSecRndLookupConfig(u16 device_id) +{ + FSecRndConig *cfgptr = NULL; + u32 index; + + /* Checking for device id for which instance it is matching */ + for (index = 0U; index < (u32)(FSEC_NUM_INSTANCES); index++) { + + /* Assigning address of config table if both device ids are matched */ + if (FSecRndConfigTable[index].device_id == device_id) { + cfgptr = &FSecRndConfigTable[index]; + break; + } + } + + return cfgptr; +} +#else +FSecRndConig *FSecRndLookupConfig(uintptr_t baseaddress) +{ + FSecRndConig *cfgptr = NULL; + u32 index; + + /* Checks all the instances */ + for (index = 0U; FSecRndConfigTable[index].name != NULL; index++) { + if ((FSecRndConfigTable[index].base_address == baseaddress) || + !baseaddress) { + cfgptr = &FSecRndConfigTable[index]; + break; + } + } + + return (FSecRndConig *)cfgptr; +} +#endif + diff --git a/drivers/sec/rnd/fsec_rnd_util.c b/drivers/sec/rnd/fsec_rnd_util.c new file mode 100644 index 000000000..03b76c260 --- /dev/null +++ b/drivers/sec/rnd/fsec_rnd_util.c @@ -0,0 +1,208 @@ +/* + * Copyright (C) 2025, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: fsec_rnd_util.c + * Created Date: 2025-07-07 14:12:50 + * Last Modified: 2025-07-18 11:54:11 + * Description: This file is for secure + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + * v1.0 kangkaiping 2025/07/09 first release + */ + + +/****************************** Include Files *********************************/ +#include +#include "fprintk.h" +#include "fio.h" +#include "fsec_rnd.h" +#include "fsec_rnd_util.h" + +/************************** Constant Definitions ****************************/ + +/************************** Function Prototypes *****************************/ + +/*****************************************************************************/ +/** + * @brief This function will secure write to an address. + * + * @param addr denotes Address + * @param value is the value to be written to the address + * + * @return None + * + *****************************************************************************/ +u32 FSecRND_SecureOut32(uintptr_t addr, u32 value) +{ + int status = FSECRND_FAILURE; + u32 read_reg; + u32 read_regTemp; + /* writing 32 bit value to specified address */ + FtOut32(addr, value); + + /* verify value written to specified address with multiple reads */ + read_reg = FtIn32(addr); + read_regTemp = FtIn32(addr); + + if( (read_reg == value) && (read_regTemp == value) ) { + status = FSECRND_SUCCESS; + } + + return status; +} + +/*****************************************************************************/ +/** + * @brief This function will Read, Modify and Write to an address. + * + * @param addr denotes Address + * @param Mask denotes the bits to be modified + * @param value is the value to be written to the address + * + * @return None + * + *****************************************************************************/ +void FSecRND_UtilRMW32(u32 addr, u32 Mask, u32 value) +{ + u32 val; + + val = FtIn32(addr); + val = (val & (~Mask)) | (Mask & value); + FtOut32(addr, val); +} + +/*****************************************************************************/ +/** + * @brief This function copies Len bytes from source memory to destination + * memory. If Len is greater than destptrlen, then destptr is also + * filled with 0s till destptrlen bytes and is considered as a failure. + * This function is a secure implementation of memcpy + * + * @param destptr is pointer to destination address + * @param destptrlen is the memory alloted to the destination buffer + * @param srcptr is pointer to source address + * @param len is number of bytes to be copied + * + * @return FSECRND_SUCCESS on success and error code on failure + * + ******************************************************************************/ +s32 FSecRND_SecureMemCpy(void *destptr, u32 destptrlen, const void *srcptr, u32 len) +{ + int status = FSECRND_FAILURE; + u8 *dest = (u8 *)destptr; + const u8 *src = (const u8 *)srcptr; + + if ((destptr == NULL) || (srcptr == NULL)) { + goto end; + } + + if (len > destptrlen) { + while (destptrlen != 0U) { + *dest = 0U; + dest++; + destptrlen--; + } + goto end; + } + + /* Loop and copy. */ + while (len != 0U) { + *dest = *src; + dest++; + src++; + len--; + } + status = FSECRND_SUCCESS; + +end: + return status; +} + + +/*****************************************************************************/ +/** + * @brief This function compares two memory regions for specified number + * of bytes. This function takes size of two memory regions to + * make sure not to read from or write to out of bound memory + * region. + * + * @param src1 - Pointer to first memory range + * @param src1size - Maximum size of first memory range + * @param src2 - Pointer to second memory range + * @param src2size - Maximum size of second memory range + * @param cmplen - Number of bytes to be compared + * + * @return + * FSECRND_SUCCESS - If specified number of bytes matches + * FSECRND_FAILURE - If there is a mistmatch found during comparison + * FSECRND_ERR_INVALID_PARAM - Invalid inputs + * + *****************************************************************************/ +s32 FSecRND_SMemCmp(const void *src1, const u32 src1size, const void *src2, const u32 src2size, const u32 cmplen) +{ + int status = FSECRND_FAILURE; + + if ((src1 == NULL) || (src2 == NULL)) { + status = FSECRND_ERR_INVALID_PARAM; + } else if ((cmplen == 0U) || (src1size < cmplen) || (src2size < cmplen)) { + status = FSECRND_ERR_INVALID_PARAM; + } else { + f_printf("FSecRND_SMemCmp src1: 0x%08x, src2: 0x%08x, cmplen: 0x%08x\n\r", src1, src2, cmplen); + status = memcmp (src1, src2, cmplen); + if (status != 0) { + status = FSECRND_FAILURE; + } + } + + return status; +} + + +/*****************************************************************************/ +/** + * @brief This is wrapper function to memset function. This function + * writes specified byte to destination specified number of times. + * This function also takes maximum string size that destination + * holds to make sure not to write out of bound area. + * + * @param dest - Pointer to destination memory + * @param destsize - Memory available at destination + * @param data - Any value from 0 to 255 + * @param len - Number of bytes to be copied + * + * @return + * FSECRND_SUCCESS - Copy is successful + * FSECRND_ERR_INVALID_PARAM - Invalid inputs + * + *****************************************************************************/ +s32 FSecRND_SMemSet(void *dest, const u32 destsize, + const u8 data, const u32 len) +{ + int status = FSECRND_FAILURE; + + if ((dest == NULL) || (destsize < len) || (len == 0U)) { + status = FSECRND_ERR_INVALID_PARAM; + } else { + (void)memset(dest, (s32)data, len); + status = FSECRND_SUCCESS; + } + + return status; +} + + diff --git a/drivers/sec/rnd/fsec_rnd_util.h b/drivers/sec/rnd/fsec_rnd_util.h new file mode 100644 index 000000000..d90e15219 --- /dev/null +++ b/drivers/sec/rnd/fsec_rnd_util.h @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2025, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: fsec_rnd_util.h + * Created Date: 2025-07-07 14:12:50 + * Last Modified: 2025-07-21 16:33:04 + * Description: This file is for secure + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + * v1.0 kangkaiping 2025/07/09 first release + */ + + + +#ifndef FSEC_RND_UTIL_H_ +#define FSEC_RND_UTIL_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/******************************* Include Files ********************************/ + +/*************************** Constant Definitions *****************************/ + +/****************** Macros (Inline Functions) Definitions *********************/ + +#ifdef __GNUC__ +/******************************************************************************/ +/** + * + * Updates the return value of the called function into Var and VarTmp variables + * for redundancy. This is to avoid glitches from altering the return values of + * security critical functions. + * + * @param Var is the variable which holds the return value of function + * executed + * @param VarTmp is the variable which holds the value stored in Var + * @param Function is the function to be executed + * @param Other params are arguments to the called function + * + * @return None + * + ******************************************************************************/ +#define FSEC_TEMPORAL_IMPL(Var, VarTmp, Function, ...) \ + { \ + Var = FSECRND_FAILURE; \ + VarTmp = FSECRND_FAILURE; \ + Var = Function(__VA_ARGS__); \ + VarTmp = Var; \ + } + +/******************************************************************************/ +/** + * + * Adds redundancy while checking the status of the called function. + * This is to avoid glitches from altering the return values of security + * critical functions. The macro requires a label to be passed to "go to" + * in case of error. + * + * @param Label is the label defined in function and the control + * will jump to the label in case of FSECRND_FAILURE + * @param Status is the variable which holds the return value of + * function executed + * @param Function is the function to be executed + * @param Other params are arguments to the called function + * + * @return None + * + ******************************************************************************/ +#define FSEC_TEMPORAL_CHECK(Label, Status, Function, ...) \ + { \ + volatile int status_tmp; \ + FSEC_TEMPORAL_IMPL(Status, status_tmp, Function, __VA_ARGS__); \ + if ((Status != FSECRND_SUCCESS) || \ + (status_tmp != FSECRND_SUCCESS)) { \ + if (((Status) != (status_tmp)) || \ + (Status == FSECRND_SUCCESS)) { \ + Status = FSECRND_ERR_GLITCH; \ + }\ + goto Label; \ + } \ + } + +#endif +/*************************** Function Prototypes ******************************/ + +/**< Read, Modify and Write to an address*/ +void FSecRND_UtilRMW32(u32 addr, u32 Mask, u32 value); + +/**< Copies Len bytes from source memory to destination memory */ +s32 FSecRND_SecureMemCpy(void *destptr, u32 destptrlen, const void *srcptr, u32 len); + +/**< Compares Len bytes between source and destination memory */ +s32 FSecRND_SMemCmp(const void *src1, const u32 src1size, const void *src2, const u32 src2size, const u32 cmplen); + +/**< Sets the destination memory of given length with given data */ +s32 FSecRND_SMemSet(void *dest, const u32 destsize, const u8 data, const u32 len); + +/**< secure reg write */ +u32 FSecRND_SecureOut32(uintptr_t addr, u32 value); + + +#ifdef __cplusplus +} +#endif + +#endif /* FSEC_RND_UTIL_H_ */ + diff --git a/drivers/sec/src.mk b/drivers/sec/src.mk new file mode 100644 index 000000000..8271ed9e7 --- /dev/null +++ b/drivers/sec/src.mk @@ -0,0 +1,20 @@ +ifdef CONFIG_ENABLE_FRND +DRIVERS_CSRCS += \ + fsec_rnd_util.c \ + fsec_rnd_g.c \ + fsec_rnd_init.c \ + fsec_rnd_debug.c \ + fsec_rnd.c +endif + +ifdef CONFIG_ENABLE_FSHA +DRIVERS_CSRCS += \ + fsec_sha.c \ + fsec_sss.c \ + fsec_sha_utils.c +endif + + + + + diff --git a/example/peripherals/sec/rnd/Kconfig b/example/peripherals/sec/rnd/Kconfig new file mode 100644 index 000000000..118209a55 --- /dev/null +++ b/example/peripherals/sec/rnd/Kconfig @@ -0,0 +1,17 @@ +mainmenu "Phytium Baremetal Configuration" + + menu "Project Configuration" + + menu " Baremetal Configuration" + config TARGET_NAME + string "Build Target Name" + default "rnd" + help + Build Target name for the demo + + endmenu + +endmenu + + +source "$(SDK_DIR)/standalone.kconfig" diff --git a/example/peripherals/sec/rnd/README.md b/example/peripherals/sec/rnd/README.md new file mode 100644 index 000000000..f3ed091fb --- /dev/null +++ b/example/peripherals/sec/rnd/README.md @@ -0,0 +1,131 @@ +# SEC RND测试 + +## 1. 例程介绍 + +> ``介绍例程的用途,使用场景,相关基本概念,描述用户可以使用例程完成哪些工作 `
` + +注:飞腾派SEC安全控制器,PE220x有1个RND控制器。 + +RND测试例程 (fsecrnd_test_example.c) + +- 初始化RND基本配置 +- 对随机数进行配置,设置为PTRNG模式 +- 打开使能是时钟及随机数产生控制位 +- 随机数数据地址生成随机数 + + + +## 2. 如何使用例程 + +> ``描述开发平台准备,使用例程配置,构建和下载镜像的过程 `
` + +本例程需要以下硬件, + +- 准备PE220x demo板,PhytiumPi其中一块开发板 +- 串口线和串口上位机 + + +### 2.1 硬件配置方法 + +- 连接串口,开始测试。 + + +### 2.2 SDK配置方法 + +> ``依赖哪些驱动、库和第三方组件,如何完成配置(列出需要使能的关键配置项)`
` + +- 使能SEC `CONFIG_USE_SEC`, 然后选择FRND驱动 `CONFIG_ENABLE_FRND` +- 使能Letter Shell `CONFIG_USE_LETTER_SHELL`, 然后选择UART驱动 `CONFIG_LS_PL011_UART` + +对应的配置项是, + +- Use SEC +- Use FRND +- Use Letter Shell + +本例子已经提供好具体的编译指令,以下进行介绍: + 1. make 将目录下的工程进行编译 + 2. make clean 将目录下的工程进行清理 + 3. make image 将目录下的工程进行编译,并将生成的elf 复制到目标地址 + 4. make list_kconfig 当前工程支持哪些配置文件 + 5. make load_kconfig LOAD_CONFIG_NAME=`` 将预设配置加载至工程中 + 6. make menuconfig 配置目录下的参数变量 + 7. make backup_kconfig 将目录下的sdkconfig 备份到./configs下 + +具体使用方法为: + +- 在当前目录下 +- 执行以上指令 + +### 2.3 构建和下载 + +> ``描述构建、烧录下载镜像的过程,列出相关的命令 `
` + +- 在host侧完成配置 + +配置成PE220x,对于其它平台,使用对应的默认配置,如PE220x: + +``` +$ make load_kconfig LOAD_CONFIG_NAME=pe2204_aarch64_demo_rnd +``` + +- 在host侧完成构建 + +``` +$ make image +``` + +- host侧设置重启host侧tftp服务器 + +``` +sudo service tftpd-hpa restart +``` + +- 开发板侧使用bootelf命令跳转 + +``` +setenv ipaddr 192.168.4.20 +setenv serverip 192.168.4.50 +setenv gatewayip 192.168.4.1 +tftpboot 0x90100000 baremetal.elf +bootelf -p 0x90100000 +``` + +### 2.4 输出与实验现象 + +> ``描述输入输出情况,列出存在哪些输出,对应的输出是什么(建议附录相关现象图片)`
` + +#### 2.4.1 RND测试默认生成100个随机数例程 + +``` +$ rnd ptrng +``` +默认输出100个随机数 + +![rnd_ptng_default](./fig/rnd_ptng_default.png) + +![rnd_ptng_default2](./fig/rnd_ptng_default2.png) + +#### 2.4.2 RND测试默认指定生成n个随机数例程 + +``` +$ rnd ptrng 16 +``` +指定生成16个(可更改小于4096)随机数 + +![rng_ptng_16byte](./fig/rng_ptng_16byte.png) + + +## 3. 如何解决问题 + +> ``主要记录使用例程中可能会遇到的问题,给出相应的解决方案 `
` + +### 3.1 查看生成随机数 + +- 如默认用例不输出显示随机数,若需要,make menuconfig修改打印Debug log level为info + +![fsec_print_info](./fig/fsec_print_info.png) + +## 4. 修改历史记录 + +> ``记录例程的重大修改记录,标明修改发生的版本号 `
` diff --git a/example/peripherals/sec/rnd/configs/pe2202_aarch32_demo_rnd.config b/example/peripherals/sec/rnd/configs/pe2202_aarch32_demo_rnd.config new file mode 100644 index 000000000..fc0052664 --- /dev/null +++ b/example/peripherals/sec/rnd/configs/pe2202_aarch32_demo_rnd.config @@ -0,0 +1,259 @@ + +# +# Project Configuration +# + +# +# Baremetal Configuration +# +CONFIG_TARGET_NAME="rnd" +# end of Baremetal Configuration +# end of Project Configuration + +CONFIG_USE_BAREMETAL=y + +# +# Arch configuration +# +CONFIG_TARGET_ARMv8=y +CONFIG_ARCH_NAME="armv8" + +# +# Arm architecture configuration +# +# CONFIG_ARCH_ARMV8_AARCH64 is not set +CONFIG_ARCH_ARMV8_AARCH32=y + +# +# Compiler configuration +# +CONFIG_ARM_GCC_SELECT=y +# CONFIG_ARM_CLANG_SELECT is not set +CONFIG_TOOLCHAIN_NAME="gcc" +CONFIG_TARGET_ARMV8_AARCH32=y +CONFIG_ARCH_EXECUTION_STATE="aarch32" + +# +# Fpu configuration +# +CONFIG_CRYPTO_NEON_FP_ARMV8=y +# CONFIG_VFPV4 is not set +# CONFIG_VFPV4_D16 is not set +# CONFIG_VFPV3 is not set +# CONFIG_VFPV3_D16 is not set +CONFIG_ARM_MFPU="crypto-neon-fp-armv8" +CONFIG_MFLOAT_ABI_HARD=y +# CONFIG_MFLOAT_ABI_SOFTFP is not set +CONFIG_ARM_MFLOAT_ABI="hard" +# end of Fpu configuration +# end of Compiler configuration + +CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# end of Arm architecture configuration + +CONFIG_MMU_PAGE_SIZE=0x1000 +CONFIG_FMMU_NUM_L2_TABLES=256 +# end of Arch configuration + +# +# Soc configuration +# +# CONFIG_TARGET_PHYTIUMPI is not set +# CONFIG_TARGET_E2000Q is not set +CONFIG_TARGET_PE2202=y +# CONFIG_TARGET_E2000S is not set +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_PD2308 is not set +# CONFIG_TARGET_QEMU_VIRT is not set +CONFIG_SOC_NAME="pe220x" +CONFIG_TARGET_TYPE_NAME="pe2202" +CONFIG_SOC_CORE_NUM=2 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 +CONFIG_TARGET_PE220X=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Soc configuration + +# +# Board Configuration +# +CONFIG_E2000D_DEMO_BOARD=y +CONFIG_BOARD_NAME="demo" + +# +# IO mux configuration when board start up +# +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_ADC_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +CONFIG_USE_UART_IOPAD=y +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +# end of IO mux configuration when board start up + +# CONFIG_CUS_DEMO_BOARD is not set + +# +# Build project name +# +# end of Build project name +# end of Board Configuration + +# +# Sdk common configuration +# +CONFIG_ELOG_LINE_BUF_SIZE=0x100 +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +CONFIG_LOG_ERROR=y +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +CONFIG_LOG_DISPALY_CORE_NUM=y +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +# CONFIG_INTERRUPT_ROLE_MASTER is not set +CONFIG_INTERRUPT_ROLE_SLAVE=y +# CONFIG_INTERRUPT_ROLE_NONE is not set +# end of Sdk common configuration + +# +# Drivers configuration +# +CONFIG_USE_IOMUX=y +# CONFIG_ENABLE_IOCTRL is not set +CONFIG_ENABLE_IOPAD=y +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +CONFIG_USE_SEC=y + +# +# SEC Configuration +# +CONFIG_ENABLE_FRND=y +# end of SEC Configuration + +# CONFIG_USE_SCMI_MHU is not set +# CONFIG_USE_I2S is not set +# CONFIG_USE_I3C is not set +# end of Drivers configuration + +# +# Third-party configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter shell configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter shell configuration + +# CONFIG_USE_AMP is not set +# CONFIG_USE_YMODEM is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_LITTLE_FS is not set +# CONFIG_USE_LVGL is not set +# CONFIG_USE_FREEMODBUS is not set +# CONFIG_USE_FSL_SDMMC is not set +# CONFIG_USE_MICROPYTHON is not set +# CONFIG_USE_TINYMAIX is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_CMSIS is not set +# end of Third-party configuration + +# +# Build setup +# +CONFIG_CHECK_DEPS=y +CONFIG_OUTPUT_BINARY=y + +# +# Optimization options +# +# CONFIG_DEBUG_NOOPT is not set +# CONFIG_DEBUG_CUSTOMOPT is not set +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_OPT_UNUSED_SECTIONS=y +CONFIG_DEBUG_LINK_MAP=y +# CONFIG_CCACHE is not set +# CONFIG_ARCH_COVERAGE is not set +# CONFIG_LTO_FULL is not set +# end of Optimization options + +# +# Debug options +# +# CONFIG_DEBUG_ENABLE_ALL_WARNING is not set +# CONFIG_WALL_WARNING_ERROR is not set +# CONFIG_STRICT_PROTOTYPES is not set +CONFIG_DEBUG_SYMBOLS=y +# CONFIG_FRAME_POINTER is not set +# CONFIG_OUTPUT_ASM_DIS is not set +# CONFIG_ENABLE_WSHADOW is not set +# CONFIG_ENABLE_WUNDEF is not set +CONFIG_DOWNGRADE_DIAG_WARNING=y +# end of Debug options + +# +# Lib +# +CONFIG_USE_COMPILE_CHAIN=y +# CONFIG_USE_NEWLIB is not set +# CONFIG_USE_USER_DEFINED is not set +# end of Lib + +# CONFIG_ENABLE_CXX is not set + +# +# Linker Options +# +CONFIG_DEFAULT_LINKER_SCRIPT=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_IMAGE_LOAD_ADDRESS=0xb0100000 +CONFIG_IMAGE_MAX_LENGTH=0x1000000 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x4000 +# end of Linker Options +# end of Build setup diff --git a/example/peripherals/sec/rnd/configs/pe2202_aarch64_demo_rnd.config b/example/peripherals/sec/rnd/configs/pe2202_aarch64_demo_rnd.config new file mode 100644 index 000000000..7452710f2 --- /dev/null +++ b/example/peripherals/sec/rnd/configs/pe2202_aarch64_demo_rnd.config @@ -0,0 +1,258 @@ + +# +# Project Configuration +# + +# +# Baremetal Configuration +# +CONFIG_TARGET_NAME="rnd" +# end of Baremetal Configuration +# end of Project Configuration + +CONFIG_USE_BAREMETAL=y + +# +# Arch configuration +# +CONFIG_TARGET_ARMv8=y +CONFIG_ARCH_NAME="armv8" + +# +# Arm architecture configuration +# +CONFIG_ARCH_ARMV8_AARCH64=y +# CONFIG_ARCH_ARMV8_AARCH32 is not set + +# +# Compiler configuration +# +CONFIG_ARM_GCC_SELECT=y +# CONFIG_ARM_CLANG_SELECT is not set +CONFIG_TOOLCHAIN_NAME="gcc" +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_ARCH_EXECUTION_STATE="aarch64" +CONFIG_ARM_NEON=y +CONFIG_ARM_CRC=y +CONFIG_ARM_CRYPTO=y +CONFIG_ARM_FLOAT_POINT=y +# CONFIG_GCC_CODE_MODEL_TINY is not set +CONFIG_GCC_CODE_MODEL_SMALL=y +# CONFIG_GCC_CODE_MODEL_LARGE is not set +# end of Compiler configuration + +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# CONFIG_MMU_DEBUG_PRINTS is not set +# end of Arm architecture configuration + +CONFIG_MMU_PAGE_SIZE=0x1000 +CONFIG_MAX_XLAT_TABLES=256 +# end of Arch configuration + +# +# Soc configuration +# +# CONFIG_TARGET_PHYTIUMPI is not set +# CONFIG_TARGET_E2000Q is not set +CONFIG_TARGET_PE2202=y +# CONFIG_TARGET_E2000S is not set +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_PD2308 is not set +# CONFIG_TARGET_QEMU_VIRT is not set +CONFIG_SOC_NAME="pe220x" +CONFIG_TARGET_TYPE_NAME="pe2202" +CONFIG_SOC_CORE_NUM=2 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 +CONFIG_TARGET_PE220X=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Soc configuration + +# +# Board Configuration +# + +CONFIG_BOARD_NAME="demo" + +# +# IO mux configuration when board start up +# +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_ADC_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +CONFIG_USE_UART_IOPAD=y +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +CONFIG_E2000D_DEMO_BOARD=y +# end of IO mux configuration when board start up + +# CONFIG_CUS_DEMO_BOARD is not set + +# +# Build project name +# +# end of Build project name +# end of Board Configuration + +# +# Sdk common configuration +# +CONFIG_ELOG_LINE_BUF_SIZE=0x100 +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +CONFIG_LOG_ERROR=y +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +CONFIG_LOG_DISPALY_CORE_NUM=y +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_NS_GTIMER=y +# CONFIG_USE_VIRTUAL_GTIMER is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# CONFIG_INTERRUPT_ROLE_NONE is not set +# end of Sdk common configuration + +# +# Drivers configuration +# +CONFIG_USE_IOMUX=y +# CONFIG_ENABLE_IOCTRL is not set +CONFIG_ENABLE_IOPAD=y +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +CONFIG_USE_SEC=y + +# +# SEC Configuration +# +CONFIG_ENABLE_FRND=y +# end of SEC Configuration + +# CONFIG_USE_SCMI_MHU is not set +# CONFIG_USE_I2S is not set +# CONFIG_USE_I3C is not set +# CONFIG_USE_MSG is not set +# CONFIG_USE_DEVICE is not set +# end of Drivers configuration + +# +# Third-party configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter shell configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter shell configuration + +# CONFIG_USE_AMP is not set +# CONFIG_USE_YMODEM is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_LITTLE_FS is not set +# CONFIG_USE_LVGL is not set +# CONFIG_USE_FREEMODBUS is not set +# CONFIG_USE_FSL_SDMMC is not set +# CONFIG_USE_MICROPYTHON is not set +# CONFIG_USE_TINYMAIX is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_CMSIS is not set +# end of Third-party configuration + +# +# Build setup +# +CONFIG_CHECK_DEPS=y +CONFIG_OUTPUT_BINARY=y + +# +# Optimization options +# +# CONFIG_DEBUG_NOOPT is not set +# CONFIG_DEBUG_CUSTOMOPT is not set +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_OPT_UNUSED_SECTIONS=y +CONFIG_DEBUG_LINK_MAP=y +# CONFIG_CCACHE is not set +# CONFIG_ARCH_COVERAGE is not set +# CONFIG_LTO_FULL is not set +# end of Optimization options + +# +# Debug options +# +# CONFIG_DEBUG_ENABLE_ALL_WARNING is not set +CONFIG_WALL_WARNING_ERROR=y +# CONFIG_STRICT_PROTOTYPES is not set +CONFIG_DEBUG_SYMBOLS=y +# CONFIG_FRAME_POINTER is not set +CONFIG_OUTPUT_ASM_DIS=y +# CONFIG_ENABLE_WSHADOW is not set +# CONFIG_ENABLE_WUNDEF is not set +CONFIG_DOWNGRADE_DIAG_WARNING=y +# end of Debug options + +# +# Lib +# +CONFIG_USE_COMPILE_CHAIN=y +# CONFIG_USE_NEWLIB is not set +# CONFIG_USE_USER_DEFINED is not set +# end of Lib + +# CONFIG_ENABLE_CXX is not set + +# +# Linker Options +# +CONFIG_DEFAULT_LINKER_SCRIPT=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_IMAGE_LOAD_ADDRESS=0xb0100000 +CONFIG_IMAGE_MAX_LENGTH=0x1000000 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x4000 +# end of Linker Options +# end of Build setup diff --git a/example/peripherals/sec/rnd/configs/pe2204_aarch32_demo_rnd.config b/example/peripherals/sec/rnd/configs/pe2204_aarch32_demo_rnd.config new file mode 100644 index 000000000..1c5c215d9 --- /dev/null +++ b/example/peripherals/sec/rnd/configs/pe2204_aarch32_demo_rnd.config @@ -0,0 +1,274 @@ + +# +# Project Configuration +# + +# +# Baremetal Configuration +# +CONFIG_TARGET_NAME="rnd" +# end of Baremetal Configuration +# end of Project Configuration + +CONFIG_USE_BAREMETAL=y + +# +# Arch configuration +# +CONFIG_TARGET_ARMv8=y +CONFIG_ARCH_NAME="armv8" + +# +# Arm architecture configuration +# +# CONFIG_ARCH_ARMV8_AARCH64 is not set +CONFIG_ARCH_ARMV8_AARCH32=y + +# +# Compiler configuration +# +CONFIG_ARM_GCC_SELECT=y +# CONFIG_ARM_CLANG_SELECT is not set +CONFIG_TOOLCHAIN_NAME="gcc" +CONFIG_TARGET_ARMV8_AARCH32=y +CONFIG_ARCH_EXECUTION_STATE="aarch32" + +# +# Fpu configuration +# +CONFIG_CRYPTO_NEON_FP_ARMV8=y +# CONFIG_VFPV4 is not set +# CONFIG_VFPV4_D16 is not set +# CONFIG_VFPV3 is not set +# CONFIG_VFPV3_D16 is not set +CONFIG_ARM_MFPU="crypto-neon-fp-armv8" +CONFIG_MFLOAT_ABI_HARD=y +# CONFIG_MFLOAT_ABI_SOFTFP is not set +CONFIG_ARM_MFLOAT_ABI="hard" +# end of Fpu configuration +# end of Compiler configuration + +CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# end of Arm architecture configuration + +# +# multi-core system deployment framework +# +# CONFIG_USE_MSDF is not set +# end of multi-core system deployment framework + +CONFIG_MMU_PAGE_SIZE_4K=y +# CONFIG_MMU_PAGE_SIZE_16K is not set +# CONFIG_MMU_PAGE_SIZE_64K is not set +CONFIG_MMU_PAGE_SIZE=0x1000 +CONFIG_MAX_XLAT_TABLES=256 +# CONFIG_ENABLE_GIC_ITS is not set +# end of Arch configuration + +# +# Soc configuration +# +CONFIG_TARGET_PE2204=y +# CONFIG_TARGET_PE2202 is not set +# CONFIG_TARGET_PE2201 is not set +# CONFIG_TARGET_PD1904 is not set +# CONFIG_TARGET_PD2008 is not set +# CONFIG_TARGET_PD2308 is not set +# CONFIG_TARGET_PS2316 is not set +# CONFIG_TARGET_PD2408 is not set +# CONFIG_TARGET_QEMU_VIRT is not set +CONFIG_SOC_NAME="pe220x" +CONFIG_TARGET_TYPE_NAME="pe2204" +CONFIG_SOC_CORE_NUM=4 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 +CONFIG_TARGET_PE220X=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Soc configuration + +# +# Board Configuration +# +CONFIG_BOARD_NAME="demo" +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +CONFIG_USE_UART_IOPAD=y +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +CONFIG_E2000Q_DEMO_BOARD=y + +# +# IO mux configuration when board start up +# +# end of IO mux configuration when board start up + +# CONFIG_PHYTIUMPI_FIREFLY_BOARD is not set +# CONFIG_CUS_DEMO_BOARD is not set + +# +# Build project name +# +# end of Build project name +# end of Board Configuration + +# +# Sdk common configuration +# +CONFIG_ELOG_LINE_BUF_SIZE=0x100 +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +CONFIG_LOG_ERROR=y +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_NS_GTIMER=y +# CONFIG_USE_VIRTUAL_GTIMER is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# CONFIG_INTERRUPT_ROLE_NONE is not set +# end of Sdk common configuration + +# +# Drivers configuration +# +CONFIG_USE_IOMUX=y +# CONFIG_ENABLE_IOCTRL is not set +CONFIG_ENABLE_IOPAD=y +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +CONFIG_USE_SEC=y + +# +# SEC Configuration +# +CONFIG_ENABLE_FRND=y +# end of SEC Configuration + +# CONFIG_USE_SCMI_MHU is not set +# CONFIG_USE_I2S is not set +# CONFIG_USE_I3C is not set +# CONFIG_USE_MSG is not set +# CONFIG_USE_DEVICE is not set +# end of Drivers configuration + +# +# Third-party configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter shell configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter shell configuration + +# CONFIG_USE_AMP is not set +# CONFIG_USE_YMODEM is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_LITTLE_FS is not set +# CONFIG_USE_LVGL is not set +# CONFIG_USE_FREEMODBUS is not set +# CONFIG_USE_FSL_SDMMC is not set +# CONFIG_USE_MICROPYTHON is not set +# CONFIG_USE_TINYMAIX is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_CMSIS is not set +# end of Third-party configuration + +# +# Build setup +# +CONFIG_CHECK_DEPS=y +CONFIG_OUTPUT_BINARY=y + +# +# Optimization options +# +# CONFIG_DEBUG_NOOPT is not set +# CONFIG_DEBUG_CUSTOMOPT is not set +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_OPT_UNUSED_SECTIONS=y +CONFIG_DEBUG_LINK_MAP=y +# CONFIG_CCACHE is not set +# CONFIG_ARCH_COVERAGE is not set +# CONFIG_LTO_FULL is not set +# end of Optimization options + +# +# Debug options +# +# CONFIG_DEBUG_ENABLE_ALL_WARNING is not set +CONFIG_WALL_WARNING_ERROR=y +# CONFIG_STRICT_PROTOTYPES is not set +CONFIG_DEBUG_SYMBOLS=y +# CONFIG_FRAME_POINTER is not set +CONFIG_OUTPUT_ASM_DIS=y +# CONFIG_ENABLE_WSHADOW is not set +# CONFIG_ENABLE_WUNDEF is not set +CONFIG_DOWNGRADE_DIAG_WARNING=y +# end of Debug options + +# +# Lib +# +CONFIG_USE_COMPILE_CHAIN=y +# CONFIG_USE_NEWLIB is not set +# CONFIG_USE_USER_DEFINED is not set +# end of Lib + +# CONFIG_ENABLE_CXX is not set + +# +# Linker Options +# +CONFIG_DEFAULT_LINKER_SCRIPT=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_IMAGE_LOAD_ADDRESS=0xb0100000 +CONFIG_IMAGE_MAX_LENGTH=0x1000000 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x4000 +# end of Linker Options +# end of Build setup diff --git a/example/peripherals/sec/rnd/configs/pe2204_aarch32_phytiumpi_rnd.config b/example/peripherals/sec/rnd/configs/pe2204_aarch32_phytiumpi_rnd.config new file mode 100644 index 000000000..7d641988c --- /dev/null +++ b/example/peripherals/sec/rnd/configs/pe2204_aarch32_phytiumpi_rnd.config @@ -0,0 +1,259 @@ + +# +# Project Configuration +# + +# +# Baremetal Configuration +# +CONFIG_TARGET_NAME="rnd" +# end of Baremetal Configuration +# end of Project Configuration + +CONFIG_USE_BAREMETAL=y + +# +# Arch configuration +# +CONFIG_TARGET_ARMv8=y +CONFIG_ARCH_NAME="armv8" + +# +# Arm architecture configuration +# +# CONFIG_ARCH_ARMV8_AARCH64 is not set +CONFIG_ARCH_ARMV8_AARCH32=y + +# +# Compiler configuration +# +CONFIG_ARM_GCC_SELECT=y +# CONFIG_ARM_CLANG_SELECT is not set +CONFIG_TOOLCHAIN_NAME="gcc" +CONFIG_TARGET_ARMV8_AARCH32=y +CONFIG_ARCH_EXECUTION_STATE="aarch32" + +# +# Fpu configuration +# +CONFIG_CRYPTO_NEON_FP_ARMV8=y +# CONFIG_VFPV4 is not set +# CONFIG_VFPV4_D16 is not set +# CONFIG_VFPV3 is not set +# CONFIG_VFPV3_D16 is not set +CONFIG_ARM_MFPU="crypto-neon-fp-armv8" +CONFIG_MFLOAT_ABI_HARD=y +# CONFIG_MFLOAT_ABI_SOFTFP is not set +CONFIG_ARM_MFLOAT_ABI="hard" +# end of Fpu configuration +# end of Compiler configuration + +CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# end of Arm architecture configuration + +CONFIG_MMU_PAGE_SIZE=0x1000 +CONFIG_FMMU_NUM_L2_TABLES=256 +# end of Arch configuration + +# +# Soc configuration +# +CONFIG_PHYTIUMPI_FIREFLY_BOARD=y +# CONFIG_TARGET_E2000Q is not set +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_PD2308 is not set +# CONFIG_TARGET_QEMU_VIRT is not set +CONFIG_SOC_NAME="phytiumpi" +CONFIG_SOC_CORE_NUM=4 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Soc configuration + +# +# Board Configuration +# +CONFIG_BOARD_NAME="phytiumpi_firefly" +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +CONFIG_USE_UART_IOPAD=y +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +CONFIG_FIREFLY_DEMO_BOARD=y + +# +# IO mux configuration when board start up +# +# end of IO mux configuration when board start up + +# CONFIG_CUS_DEMO_BOARD is not set + +# +# Build project name +# +# end of Build project name +# end of Board Configuration + +# +# Sdk common configuration +# +CONFIG_ELOG_LINE_BUF_SIZE=0x100 +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +CONFIG_LOG_ERROR=y +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +CONFIG_LOG_DISPALY_CORE_NUM=y +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +# CONFIG_INTERRUPT_ROLE_MASTER is not set +CONFIG_INTERRUPT_ROLE_SLAVE=y +# CONFIG_INTERRUPT_ROLE_NONE is not set +# end of Sdk common configuration + +# +# Drivers configuration +# +CONFIG_USE_IOMUX=y +# CONFIG_ENABLE_IOCTRL is not set +CONFIG_ENABLE_IOPAD=y +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +CONFIG_USE_SEC=y + +# +# SEC Configuration +# +CONFIG_ENABLE_FRND=y +# end of SEC Configuration + +# CONFIG_USE_SCMI_MHU is not set +# CONFIG_USE_I2S is not set +# CONFIG_USE_I3C is not set +# CONFIG_USE_MSG is not set +# CONFIG_USE_DEVICE is not set +# end of Drivers configuration + +# +# Third-party configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter shell configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter shell configuration + +# CONFIG_USE_AMP is not set +# CONFIG_USE_YMODEM is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_LITTLE_FS is not set +# CONFIG_USE_LVGL is not set +# CONFIG_USE_FREEMODBUS is not set +# CONFIG_USE_FSL_SDMMC is not set +# CONFIG_USE_MICROPYTHON is not set +# CONFIG_USE_TINYMAIX is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_CMSIS is not set +# end of Third-party configuration + +# +# Build setup +# +CONFIG_CHECK_DEPS=y +# CONFIG_OUTPUT_BINARY is not set + +# +# Optimization options +# +# CONFIG_DEBUG_NOOPT is not set +# CONFIG_DEBUG_CUSTOMOPT is not set +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_OPT_UNUSED_SECTIONS=y +CONFIG_DEBUG_LINK_MAP=y +# CONFIG_CCACHE is not set +# CONFIG_ARCH_COVERAGE is not set +# CONFIG_LTO_FULL is not set +# end of Optimization options + +# +# Debug options +# +# CONFIG_DEBUG_ENABLE_ALL_WARNING is not set +# CONFIG_WALL_WARNING_ERROR is not set +# CONFIG_STRICT_PROTOTYPES is not set +CONFIG_DEBUG_SYMBOLS=y +# CONFIG_FRAME_POINTER is not set +# CONFIG_OUTPUT_ASM_DIS is not set +# CONFIG_ENABLE_WSHADOW is not set +# CONFIG_ENABLE_WUNDEF is not set +CONFIG_DOWNGRADE_DIAG_WARNING=y +# end of Debug options + +# +# Lib +# +CONFIG_USE_COMPILE_CHAIN=y +# CONFIG_USE_NEWLIB is not set +# CONFIG_USE_USER_DEFINED is not set +# end of Lib + +# CONFIG_ENABLE_CXX is not set + +# +# Linker Options +# +CONFIG_DEFAULT_LINKER_SCRIPT=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_IMAGE_LOAD_ADDRESS=0xb0100000 +CONFIG_IMAGE_MAX_LENGTH=0x1000000 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x4000 +# end of Linker Options +# end of Build setup diff --git a/example/peripherals/sec/rnd/configs/pe2204_aarch64_demo_rnd.config b/example/peripherals/sec/rnd/configs/pe2204_aarch64_demo_rnd.config new file mode 100644 index 000000000..5ed3768e9 --- /dev/null +++ b/example/peripherals/sec/rnd/configs/pe2204_aarch64_demo_rnd.config @@ -0,0 +1,258 @@ + +# +# Project Configuration +# + +# +# Baremetal Configuration +# +CONFIG_TARGET_NAME="rnd" +# end of Baremetal Configuration +# end of Project Configuration + +CONFIG_USE_BAREMETAL=y + +# +# Arch configuration +# +CONFIG_TARGET_ARMv8=y +CONFIG_ARCH_NAME="armv8" + +# +# Arm architecture configuration +# +CONFIG_ARCH_ARMV8_AARCH64=y +# CONFIG_ARCH_ARMV8_AARCH32 is not set + +# +# Compiler configuration +# +CONFIG_ARM_GCC_SELECT=y +# CONFIG_ARM_CLANG_SELECT is not set +CONFIG_TOOLCHAIN_NAME="gcc" +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_ARCH_EXECUTION_STATE="aarch64" +CONFIG_ARM_NEON=y +CONFIG_ARM_CRC=y +CONFIG_ARM_CRYPTO=y +CONFIG_ARM_FLOAT_POINT=y +# CONFIG_GCC_CODE_MODEL_TINY is not set +CONFIG_GCC_CODE_MODEL_SMALL=y +# CONFIG_GCC_CODE_MODEL_LARGE is not set +# end of Compiler configuration + +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# CONFIG_MMU_DEBUG_PRINTS is not set +# end of Arm architecture configuration + +CONFIG_MMU_PAGE_SIZE=0x1000 +CONFIG_MAX_XLAT_TABLES=256 +# end of Arch configuration + +# +# Soc configuration +# +CONFIG_TARGET_PE2204=y +# CONFIG_TARGET_PE2202 is not set +# CONFIG_TARGET_PE2201 is not set +# CONFIG_TARGET_PD1904 is not set +# CONFIG_TARGET_PD2008 is not set +# CONFIG_TARGET_PD2308 is not set +# CONFIG_TARGET_PS2316 is not set +# CONFIG_TARGET_PD2408 is not set +# CONFIG_TARGET_QEMU_VIRT is not set +CONFIG_SOC_NAME="pe220x" +CONFIG_TARGET_TYPE_NAME="pe2204" +CONFIG_SOC_CORE_NUM=4 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 +CONFIG_TARGET_PE220X=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Soc configuration + +# +# Board Configuration +# +CONFIG_BOARD_NAME="demo" +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +CONFIG_USE_UART_IOPAD=y +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +CONFIG_E2000Q_DEMO_BOARD=y + +# +# IO mux configuration when board start up +# +# end of IO mux configuration when board start up + +# CONFIG_PHYTIUMPI_FIREFLY_BOARD is not set +# CONFIG_CUS_DEMO_BOARD is not set + +# +# Build project name +# +# end of Build project name +# end of Board Configuration + +# +# Sdk common configuration +# +CONFIG_ELOG_LINE_BUF_SIZE=0x100 +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +CONFIG_LOG_VERBOS=y +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_NS_GTIMER=y +# CONFIG_USE_VIRTUAL_GTIMER is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# CONFIG_INTERRUPT_ROLE_NONE is not set +# end of Sdk common configuration + +# +# Drivers configuration +# +CONFIG_USE_IOMUX=y +# CONFIG_ENABLE_IOCTRL is not set +CONFIG_ENABLE_IOPAD=y +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +CONFIG_USE_SEC=y + +# +# SEC Configuration +# +CONFIG_ENABLE_FRND=y +# end of SEC Configuration + +# CONFIG_USE_SCMI_MHU is not set +# CONFIG_USE_I2S is not set +# CONFIG_USE_I3C is not set +# CONFIG_USE_MSG is not set +# CONFIG_USE_DEVICE is not set +# end of Drivers configuration + +# +# Third-party configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter shell configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter shell configuration + +# CONFIG_USE_AMP is not set +# CONFIG_USE_YMODEM is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_LITTLE_FS is not set +# CONFIG_USE_LVGL is not set +# CONFIG_USE_FREEMODBUS is not set +# CONFIG_USE_FSL_SDMMC is not set +# CONFIG_USE_MICROPYTHON is not set +# CONFIG_USE_TINYMAIX is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_CMSIS is not set +# end of Third-party configuration + +# +# Build setup +# +CONFIG_CHECK_DEPS=y +CONFIG_OUTPUT_BINARY=y + +# +# Optimization options +# +# CONFIG_DEBUG_NOOPT is not set +# CONFIG_DEBUG_CUSTOMOPT is not set +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_OPT_UNUSED_SECTIONS=y +CONFIG_DEBUG_LINK_MAP=y +# CONFIG_CCACHE is not set +# CONFIG_ARCH_COVERAGE is not set +# CONFIG_LTO_FULL is not set +# end of Optimization options + +# +# Debug options +# +# CONFIG_DEBUG_ENABLE_ALL_WARNING is not set +CONFIG_WALL_WARNING_ERROR=y +# CONFIG_STRICT_PROTOTYPES is not set +CONFIG_DEBUG_SYMBOLS=y +# CONFIG_FRAME_POINTER is not set +CONFIG_OUTPUT_ASM_DIS=y +# CONFIG_ENABLE_WSHADOW is not set +# CONFIG_ENABLE_WUNDEF is not set +CONFIG_DOWNGRADE_DIAG_WARNING=y +# end of Debug options + +# +# Lib +# +CONFIG_USE_COMPILE_CHAIN=y +# CONFIG_USE_NEWLIB is not set +# CONFIG_USE_USER_DEFINED is not set +# end of Lib + +# CONFIG_ENABLE_CXX is not set + +# +# Linker Options +# +CONFIG_DEFAULT_LINKER_SCRIPT=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_IMAGE_LOAD_ADDRESS=0xb0100000 +CONFIG_IMAGE_MAX_LENGTH=0x1000000 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x4000 +# end of Linker Options +# end of Build setup diff --git a/example/peripherals/sec/rnd/configs/pe2204_aarch64_phytiumpi_rnd.config b/example/peripherals/sec/rnd/configs/pe2204_aarch64_phytiumpi_rnd.config new file mode 100644 index 000000000..bb90a127a --- /dev/null +++ b/example/peripherals/sec/rnd/configs/pe2204_aarch64_phytiumpi_rnd.config @@ -0,0 +1,253 @@ + +# +# Project Configuration +# + +# +# Baremetal Configuration +# +CONFIG_TARGET_NAME="rnd" +# end of Baremetal Configuration +# end of Project Configuration + +CONFIG_USE_BAREMETAL=y + +# +# Arch configuration +# +CONFIG_TARGET_ARMv8=y +CONFIG_ARCH_NAME="armv8" + +# +# Arm architecture configuration +# +CONFIG_ARCH_ARMV8_AARCH64=y +# CONFIG_ARCH_ARMV8_AARCH32 is not set + +# +# Compiler configuration +# +CONFIG_ARM_GCC_SELECT=y +# CONFIG_ARM_CLANG_SELECT is not set +CONFIG_TOOLCHAIN_NAME="gcc" +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_ARCH_EXECUTION_STATE="aarch64" +CONFIG_ARM_NEON=y +CONFIG_ARM_CRC=y +CONFIG_ARM_CRYPTO=y +CONFIG_ARM_FLOAT_POINT=y +# CONFIG_GCC_CODE_MODEL_TINY is not set +CONFIG_GCC_CODE_MODEL_SMALL=y +# CONFIG_GCC_CODE_MODEL_LARGE is not set +# end of Compiler configuration + +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# CONFIG_MMU_DEBUG_PRINTS is not set +# end of Arm architecture configuration + +CONFIG_MMU_PAGE_SIZE=0x1000 +CONFIG_MAX_XLAT_TABLES=256 +# end of Arch configuration + +# +# Soc configuration +# +CONFIG_PHYTIUMPI_FIREFLY_BOARD=y +# CONFIG_TARGET_E2000Q is not set +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +# CONFIG_TARGET_FT2004 is not set +# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_PD2308 is not set +# CONFIG_TARGET_QEMU_VIRT is not set +CONFIG_SOC_NAME="phytiumpi" +CONFIG_SOC_CORE_NUM=4 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Soc configuration + +# +# Board Configuration +# +CONFIG_BOARD_NAME="phytiumpi_firefly" +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +CONFIG_USE_UART_IOPAD=y +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +CONFIG_FIREFLY_DEMO_BOARD=y + +# +# IO mux configuration when board start up +# +# end of IO mux configuration when board start up + +# CONFIG_CUS_DEMO_BOARD is not set + +# +# Build project name +# +# end of Build project name +# end of Board Configuration + +# +# Sdk common configuration +# +CONFIG_ELOG_LINE_BUF_SIZE=0x100 +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +CONFIG_LOG_ERROR=y +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +CONFIG_LOG_DISPALY_CORE_NUM=y +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# CONFIG_INTERRUPT_ROLE_NONE is not set +# end of Sdk common configuration + +# +# Drivers configuration +# +CONFIG_USE_IOMUX=y +# CONFIG_ENABLE_IOCTRL is not set +CONFIG_ENABLE_IOPAD=y +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +CONFIG_USE_SEC=y + +# +# SEC Configuration +# +CONFIG_ENABLE_FRND=y +# end of SEC Configuration + +# CONFIG_USE_SCMI_MHU is not set +# CONFIG_USE_I2S is not set +# CONFIG_USE_I3C is not set +# CONFIG_USE_MSG is not set +# CONFIG_USE_DEVICE is not set +# end of Drivers configuration + +# +# Third-party configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter shell configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter shell configuration + +# CONFIG_USE_AMP is not set +# CONFIG_USE_YMODEM is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_LITTLE_FS is not set +# CONFIG_USE_LVGL is not set +# CONFIG_USE_FREEMODBUS is not set +# CONFIG_USE_FSL_SDMMC is not set +# CONFIG_USE_MICROPYTHON is not set +# CONFIG_USE_TINYMAIX is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_CMSIS is not set +# end of Third-party configuration + +# +# Build setup +# +CONFIG_CHECK_DEPS=y +# CONFIG_OUTPUT_BINARY is not set + +# +# Optimization options +# +# CONFIG_DEBUG_NOOPT is not set +# CONFIG_DEBUG_CUSTOMOPT is not set +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_OPT_UNUSED_SECTIONS=y +CONFIG_DEBUG_LINK_MAP=y +# CONFIG_CCACHE is not set +# CONFIG_ARCH_COVERAGE is not set +# CONFIG_LTO_FULL is not set +# end of Optimization options + +# +# Debug options +# +# CONFIG_DEBUG_ENABLE_ALL_WARNING is not set +# CONFIG_WALL_WARNING_ERROR is not set +# CONFIG_STRICT_PROTOTYPES is not set +CONFIG_DEBUG_SYMBOLS=y +# CONFIG_FRAME_POINTER is not set +# CONFIG_OUTPUT_ASM_DIS is not set +# CONFIG_ENABLE_WSHADOW is not set +# CONFIG_ENABLE_WUNDEF is not set +CONFIG_DOWNGRADE_DIAG_WARNING=y +# end of Debug options + +# +# Lib +# +CONFIG_USE_COMPILE_CHAIN=y +# CONFIG_USE_NEWLIB is not set +# CONFIG_USE_USER_DEFINED is not set +# end of Lib + +# CONFIG_ENABLE_CXX is not set + +# +# Linker Options +# +CONFIG_DEFAULT_LINKER_SCRIPT=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_IMAGE_LOAD_ADDRESS=0xb0100000 +CONFIG_IMAGE_MAX_LENGTH=0x1000000 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x4000 +# end of Linker Options +# end of Build setup diff --git a/example/peripherals/sec/rnd/fig/fsec_print_info.png b/example/peripherals/sec/rnd/fig/fsec_print_info.png new file mode 100644 index 0000000000000000000000000000000000000000..71a715da2784aa038bcd1898c9e3c421ff4166bb GIT binary patch literal 15862 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 literal 0 HcmV?d00001 diff --git a/example/peripherals/sec/rnd/fig/rnd_ptng_default.png b/example/peripherals/sec/rnd/fig/rnd_ptng_default.png new file mode 100644 index 0000000000000000000000000000000000000000..75cc0ea9ab9d1b0b946f1d5519e1186f4572fa0a GIT binary patch literal 52509 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 +#include "ftypes.h" +#include "fsleep.h" +#include "fprintk.h" +#include "stdio.h" +#include "fdebug.h" +#include "fcache.h" +#include "sdkconfig.h" +#ifdef CONFIG_USE_LETTER_SHELL +#include "shell_port.h" +#endif +#include "fsecrnd_test_example.h" + +/************************** Function Prototypes ******************************/ +int main(int argc, char **argv) +{ + +#ifdef CONFIG_USE_LETTER_SHELL + /* if shell command is enabled, register example entry as shell command */ + LSUserShellLoop(); +#else + /*run the rnd example*/ + FSecRndPtrngExample(0,100); +#endif + return 0; +} + diff --git a/example/peripherals/sec/rnd/makefile b/example/peripherals/sec/rnd/makefile new file mode 100644 index 000000000..2121ed64b --- /dev/null +++ b/example/peripherals/sec/rnd/makefile @@ -0,0 +1,23 @@ +# 指定工程项目根目录为当前 +PROJECT_DIR = $(CURDIR) +SDK_DIR ?= $(CURDIR)/../../../.. + + +USER_CSRC := main.c +USER_CSRC += $(wildcard src/*.c) + + +USER_INCLUDE := $(PROJECT_DIR) \ + $(PROJECT_DIR)/inc \ + $(SDK_DIR)/drivers/sec/rnd/ + + +include $(SDK_DIR)/tools/build/makeall.mk + +USR_BOOT_DIR ?= /mnt/d/tftpboot + +image: + make clean + make all -j + cp ./$(IMAGE_OUT_NAME).elf $(USR_BOOT_DIR)/baremetal.elf + cp ./$(IMAGE_OUT_NAME).bin $(USR_BOOT_DIR)/baremetal.bin \ No newline at end of file diff --git a/example/peripherals/sec/rnd/sdkconfig b/example/peripherals/sec/rnd/sdkconfig new file mode 100644 index 000000000..3564ae847 --- /dev/null +++ b/example/peripherals/sec/rnd/sdkconfig @@ -0,0 +1,270 @@ + +# +# Project Configuration +# + +# +# Baremetal Configuration +# +CONFIG_TARGET_NAME="rnd" +# end of Baremetal Configuration +# end of Project Configuration + +CONFIG_USE_BAREMETAL=y + +# +# Arch configuration +# +CONFIG_TARGET_ARMv8=y +CONFIG_ARCH_NAME="armv8" + +# +# Arm architecture configuration +# +CONFIG_ARCH_ARMV8_AARCH64=y +# CONFIG_ARCH_ARMV8_AARCH32 is not set + +# +# Compiler configuration +# +CONFIG_ARM_GCC_SELECT=y +# CONFIG_ARM_CLANG_SELECT is not set +CONFIG_TOOLCHAIN_NAME="gcc" +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_ARCH_EXECUTION_STATE="aarch64" +CONFIG_ARM_NEON=y +CONFIG_ARM_CRC=y +CONFIG_ARM_CRYPTO=y +CONFIG_ARM_FLOAT_POINT=y +# CONFIG_GCC_CODE_MODEL_TINY is not set +CONFIG_GCC_CODE_MODEL_SMALL=y +# CONFIG_GCC_CODE_MODEL_LARGE is not set +# end of Compiler configuration + +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# CONFIG_MMU_DEBUG_PRINTS is not set +# end of Arm architecture configuration + +# +# multi-core system deployment framework +# +# CONFIG_USE_MSDF is not set +# end of multi-core system deployment framework + +CONFIG_MMU_PAGE_SIZE_4K=y +# CONFIG_MMU_PAGE_SIZE_16K is not set +# CONFIG_MMU_PAGE_SIZE_64K is not set +CONFIG_MMU_PAGE_SIZE=0x1000 +CONFIG_MAX_XLAT_TABLES=256 +# CONFIG_ENABLE_GIC_ITS is not set +# end of Arch configuration + +# +# Soc configuration +# +CONFIG_TARGET_PE2204=y +# CONFIG_TARGET_PE2202 is not set +# CONFIG_TARGET_PE2201 is not set +# CONFIG_TARGET_PD1904 is not set +# CONFIG_TARGET_PD2008 is not set +# CONFIG_TARGET_PD2308 is not set +# CONFIG_TARGET_PS2316 is not set +# CONFIG_TARGET_PD2408 is not set +# CONFIG_TARGET_QEMU_VIRT is not set +CONFIG_SOC_NAME="pe220x" +CONFIG_TARGET_TYPE_NAME="pe2204" +CONFIG_SOC_CORE_NUM=4 +CONFIG_F32BIT_MEMORY_ADDRESS=0x80000000 +CONFIG_F32BIT_MEMORY_LENGTH=0x80000000 +CONFIG_F64BIT_MEMORY_ADDRESS=0x2000000000 +CONFIG_F64BIT_MEMORY_LENGTH=0x800000000 +CONFIG_TARGET_PE220X=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# CONFIG_UART_INIT_NOT_CLR_INTR is not set +# end of Soc configuration + +# +# Board Configuration +# +CONFIG_BOARD_NAME="demo" +# CONFIG_USE_SPI_IOPAD is not set +# CONFIG_USE_GPIO_IOPAD is not set +# CONFIG_USE_CAN_IOPAD is not set +# CONFIG_USE_QSPI_IOPAD is not set +# CONFIG_USE_PWM_IOPAD is not set +# CONFIG_USE_MIO_IOPAD is not set +# CONFIG_USE_TACHO_IOPAD is not set +CONFIG_USE_UART_IOPAD=y +# CONFIG_USE_THIRD_PARTY_IOPAD is not set +CONFIG_E2000Q_DEMO_BOARD=y + +# +# IO mux configuration when board start up +# +# end of IO mux configuration when board start up + +# CONFIG_PHYTIUMPI_FIREFLY_BOARD is not set +# CONFIG_CUS_DEMO_BOARD is not set + +# +# Build project name +# +# end of Build project name +# end of Board Configuration + +# +# Sdk common configuration +# +CONFIG_ELOG_LINE_BUF_SIZE=0x100 +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +CONFIG_LOG_INFO=y +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_NS_GTIMER=y +# CONFIG_USE_VIRTUAL_GTIMER is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# CONFIG_INTERRUPT_ROLE_NONE is not set +# end of Sdk common configuration + +# +# Drivers configuration +# +CONFIG_USE_IOMUX=y +# CONFIG_ENABLE_IOCTRL is not set +CONFIG_ENABLE_IOPAD=y +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +CONFIG_USE_SEC=y + +# +# SEC Configuration +# +CONFIG_ENABLE_FRND=y +# CONFIG_ENABLE_FSHA is not set +# end of SEC Configuration + +# CONFIG_USE_SCMI_MHU is not set +# CONFIG_USE_I2S is not set +# CONFIG_USE_I3C is not set +# CONFIG_USE_MSG is not set +# CONFIG_USE_DEVICE is not set +# end of Drivers configuration + +# +# Third-party configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter shell configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter shell configuration + +# CONFIG_USE_AMP is not set +# CONFIG_USE_YMODEM is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_LITTLE_FS is not set +# CONFIG_USE_LVGL is not set +# CONFIG_USE_FREEMODBUS is not set +# CONFIG_USE_FSL_SDMMC is not set +# CONFIG_USE_MICROPYTHON is not set +# CONFIG_USE_TINYMAIX is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_CMSIS is not set +# end of Third-party configuration + +# +# Build setup +# +CONFIG_CHECK_DEPS=y +CONFIG_OUTPUT_BINARY=y + +# +# Optimization options +# +# CONFIG_DEBUG_NOOPT is not set +# CONFIG_DEBUG_CUSTOMOPT is not set +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_OPT_UNUSED_SECTIONS=y +CONFIG_DEBUG_LINK_MAP=y +# CONFIG_CCACHE is not set +# CONFIG_ARCH_COVERAGE is not set +# CONFIG_LTO_FULL is not set +# end of Optimization options + +# +# Debug options +# +# CONFIG_DEBUG_ENABLE_ALL_WARNING is not set +CONFIG_WALL_WARNING_ERROR=y +# CONFIG_STRICT_PROTOTYPES is not set +CONFIG_DEBUG_SYMBOLS=y +# CONFIG_FRAME_POINTER is not set +CONFIG_OUTPUT_ASM_DIS=y +# CONFIG_ENABLE_WSHADOW is not set +# CONFIG_ENABLE_WUNDEF is not set +CONFIG_DOWNGRADE_DIAG_WARNING=y +# end of Debug options + +# +# Lib +# +CONFIG_USE_COMPILE_CHAIN=y +# CONFIG_USE_NEWLIB is not set +# CONFIG_USE_USER_DEFINED is not set +# end of Lib + +# CONFIG_ENABLE_CXX is not set + +# +# Linker Options +# +CONFIG_DEFAULT_LINKER_SCRIPT=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_IMAGE_LOAD_ADDRESS=0xb0100000 +CONFIG_IMAGE_MAX_LENGTH=0x1000000 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x4000 +# end of Linker Options +# end of Build setup diff --git a/example/peripherals/sec/rnd/sdkconfig.h b/example/peripherals/sec/rnd/sdkconfig.h new file mode 100644 index 000000000..fee2503a8 --- /dev/null +++ b/example/peripherals/sec/rnd/sdkconfig.h @@ -0,0 +1,244 @@ +#ifndef SDK_CONFIG_H__ +#define SDK_CONFIG_H__ + +/* Project Configuration */ + +/* Baremetal Configuration */ + +#define CONFIG_TARGET_NAME "rnd" +/* end of Baremetal Configuration */ +/* end of Project Configuration */ +#define CONFIG_USE_BAREMETAL + +/* Arch configuration */ + +#define CONFIG_TARGET_ARMv8 +#define CONFIG_ARCH_NAME "armv8" + +/* Arm architecture configuration */ + +#define CONFIG_ARCH_ARMV8_AARCH64 +/* CONFIG_ARCH_ARMV8_AARCH32 is not set */ + +/* Compiler configuration */ + +#define CONFIG_ARM_GCC_SELECT +/* CONFIG_ARM_CLANG_SELECT is not set */ +#define CONFIG_TOOLCHAIN_NAME "gcc" +#define CONFIG_TARGET_ARMV8_AARCH64 +#define CONFIG_ARCH_EXECUTION_STATE "aarch64" +#define CONFIG_ARM_NEON +#define CONFIG_ARM_CRC +#define CONFIG_ARM_CRYPTO +#define CONFIG_ARM_FLOAT_POINT +/* CONFIG_GCC_CODE_MODEL_TINY is not set */ +#define CONFIG_GCC_CODE_MODEL_SMALL +/* CONFIG_GCC_CODE_MODEL_LARGE is not set */ +/* end of Compiler configuration */ +/* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ +/* CONFIG_MMU_DEBUG_PRINTS is not set */ +/* end of Arm architecture configuration */ + +/* multi-core system deployment framework */ + +/* CONFIG_USE_MSDF is not set */ +/* end of multi-core system deployment framework */ +#define CONFIG_MMU_PAGE_SIZE_4K +/* CONFIG_MMU_PAGE_SIZE_16K is not set */ +/* CONFIG_MMU_PAGE_SIZE_64K is not set */ +#define CONFIG_MMU_PAGE_SIZE 0x1000 +#define CONFIG_MAX_XLAT_TABLES 256 +/* CONFIG_ENABLE_GIC_ITS is not set */ +/* end of Arch configuration */ + +/* Soc configuration */ + +#define CONFIG_TARGET_PE2204 +/* CONFIG_TARGET_PE2202 is not set */ +/* CONFIG_TARGET_PE2201 is not set */ +/* CONFIG_TARGET_PD1904 is not set */ +/* CONFIG_TARGET_PD2008 is not set */ +/* CONFIG_TARGET_PD2308 is not set */ +/* CONFIG_TARGET_PS2316 is not set */ +/* CONFIG_TARGET_PD2408 is not set */ +/* CONFIG_TARGET_QEMU_VIRT is not set */ +#define CONFIG_SOC_NAME "pe220x" +#define CONFIG_TARGET_TYPE_NAME "pe2204" +#define CONFIG_SOC_CORE_NUM 4 +#define CONFIG_F32BIT_MEMORY_ADDRESS 0x80000000 +#define CONFIG_F32BIT_MEMORY_LENGTH 0x80000000 +#define CONFIG_F64BIT_MEMORY_ADDRESS 0x2000000000 +#define CONFIG_F64BIT_MEMORY_LENGTH 0x800000000 +#define CONFIG_TARGET_PE220X +#define CONFIG_DEFAULT_DEBUG_PRINT_UART1 +/* CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set */ +/* CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set */ +/* CONFIG_UART_INIT_NOT_CLR_INTR is not set */ +/* end of Soc configuration */ + +/* Board Configuration */ + +#define CONFIG_BOARD_NAME "demo" +/* CONFIG_USE_SPI_IOPAD is not set */ +/* CONFIG_USE_GPIO_IOPAD is not set */ +/* CONFIG_USE_CAN_IOPAD is not set */ +/* CONFIG_USE_QSPI_IOPAD is not set */ +/* CONFIG_USE_PWM_IOPAD is not set */ +/* CONFIG_USE_MIO_IOPAD is not set */ +/* CONFIG_USE_TACHO_IOPAD is not set */ +#define CONFIG_USE_UART_IOPAD +/* CONFIG_USE_THIRD_PARTY_IOPAD is not set */ +#define CONFIG_E2000Q_DEMO_BOARD + +/* IO mux configuration when board start up */ + +/* end of IO mux configuration when board start up */ +/* CONFIG_PHYTIUMPI_FIREFLY_BOARD is not set */ +/* CONFIG_CUS_DEMO_BOARD is not set */ + +/* Build project name */ + +/* end of Build project name */ +/* end of Board Configuration */ + +/* Sdk common configuration */ + +#define CONFIG_ELOG_LINE_BUF_SIZE 0x100 +/* CONFIG_LOG_VERBOS is not set */ +/* CONFIG_LOG_DEBUG is not set */ +#define CONFIG_LOG_INFO +/* CONFIG_LOG_WARN is not set */ +/* CONFIG_LOG_ERROR is not set */ +/* CONFIG_LOG_NONE is not set */ +/* CONFIG_LOG_EXTRA_INFO is not set */ +/* CONFIG_LOG_DISPALY_CORE_NUM is not set */ +/* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_NS_GTIMER +/* CONFIG_USE_VIRTUAL_GTIMER is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* CONFIG_INTERRUPT_ROLE_NONE is not set */ +/* end of Sdk common configuration */ + +/* Drivers configuration */ + +#define CONFIG_USE_IOMUX +/* CONFIG_ENABLE_IOCTRL is not set */ +#define CONFIG_ENABLE_IOPAD +/* CONFIG_USE_SPI is not set */ +/* CONFIG_USE_QSPI is not set */ +#define CONFIG_USE_SERIAL + +/* Usart Configuration */ + +#define CONFIG_ENABLE_Pl011_UART +/* end of Usart Configuration */ +/* CONFIG_USE_GPIO is not set */ +/* CONFIG_USE_ETH is not set */ +/* CONFIG_USE_CAN is not set */ +/* CONFIG_USE_I2C is not set */ +/* CONFIG_USE_TIMER is not set */ +/* CONFIG_USE_MIO is not set */ +/* CONFIG_USE_SDMMC is not set */ +/* CONFIG_USE_PCIE is not set */ +/* CONFIG_USE_WDT is not set */ +/* CONFIG_USE_DMA is not set */ +/* CONFIG_USE_NAND is not set */ +/* CONFIG_USE_RTC is not set */ +/* CONFIG_USE_SATA is not set */ +/* CONFIG_USE_ADC is not set */ +/* CONFIG_USE_PWM is not set */ +/* CONFIG_USE_IPC is not set */ +/* CONFIG_USE_MEDIA is not set */ +#define CONFIG_USE_SEC + +/* SEC Configuration */ + +#define CONFIG_ENABLE_FRND +/* CONFIG_ENABLE_FSHA is not set */ +/* end of SEC Configuration */ +/* CONFIG_USE_SCMI_MHU is not set */ +/* CONFIG_USE_I2S is not set */ +/* CONFIG_USE_I3C is not set */ +/* CONFIG_USE_MSG is not set */ +/* CONFIG_USE_DEVICE is not set */ +/* end of Drivers configuration */ + +/* Third-party configuration */ + +/* CONFIG_USE_LWIP is not set */ +#define CONFIG_USE_LETTER_SHELL + +/* Letter shell configuration */ + +#define CONFIG_LS_PL011_UART +#define CONFIG_DEFAULT_LETTER_SHELL_USE_UART1 +/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set */ +/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set */ +/* end of Letter shell configuration */ +/* CONFIG_USE_AMP is not set */ +/* CONFIG_USE_YMODEM is not set */ +/* CONFIG_USE_SFUD is not set */ +/* CONFIG_USE_FATFS_0_1_4 is not set */ +/* CONFIG_USE_SPIFFS is not set */ +/* CONFIG_USE_LITTLE_FS is not set */ +/* CONFIG_USE_LVGL is not set */ +/* CONFIG_USE_FREEMODBUS is not set */ +/* CONFIG_USE_FSL_SDMMC is not set */ +/* CONFIG_USE_MICROPYTHON is not set */ +/* CONFIG_USE_TINYMAIX is not set */ +/* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_CMSIS is not set */ +/* end of Third-party configuration */ + +/* Build setup */ + +#define CONFIG_CHECK_DEPS +#define CONFIG_OUTPUT_BINARY + +/* Optimization options */ + +/* CONFIG_DEBUG_NOOPT is not set */ +/* CONFIG_DEBUG_CUSTOMOPT is not set */ +#define CONFIG_DEBUG_FULLOPT +#define CONFIG_DEBUG_OPT_UNUSED_SECTIONS +#define CONFIG_DEBUG_LINK_MAP +/* CONFIG_CCACHE is not set */ +/* CONFIG_ARCH_COVERAGE is not set */ +/* CONFIG_LTO_FULL is not set */ +/* end of Optimization options */ + +/* Debug options */ + +/* CONFIG_DEBUG_ENABLE_ALL_WARNING is not set */ +#define CONFIG_WALL_WARNING_ERROR +/* CONFIG_STRICT_PROTOTYPES is not set */ +#define CONFIG_DEBUG_SYMBOLS +/* CONFIG_FRAME_POINTER is not set */ +#define CONFIG_OUTPUT_ASM_DIS +/* CONFIG_ENABLE_WSHADOW is not set */ +/* CONFIG_ENABLE_WUNDEF is not set */ +#define CONFIG_DOWNGRADE_DIAG_WARNING +/* end of Debug options */ + +/* Lib */ + +#define CONFIG_USE_COMPILE_CHAIN +/* CONFIG_USE_NEWLIB is not set */ +/* CONFIG_USE_USER_DEFINED is not set */ +/* end of Lib */ +/* CONFIG_ENABLE_CXX is not set */ + +/* Linker Options */ + +#define CONFIG_DEFAULT_LINKER_SCRIPT +/* CONFIG_USER_DEFINED_LD is not set */ +#define CONFIG_IMAGE_LOAD_ADDRESS 0xb0100000 +#define CONFIG_IMAGE_MAX_LENGTH 0x1000000 +#define CONFIG_HEAP_SIZE 1 +#define CONFIG_STACK_SIZE 0x4000 +/* end of Linker Options */ +/* end of Build setup */ + +#endif diff --git a/example/peripherals/sec/rnd/src/cmd_rnd.c b/example/peripherals/sec/rnd/src/cmd_rnd.c new file mode 100644 index 000000000..098b3f458 --- /dev/null +++ b/example/peripherals/sec/rnd/src/cmd_rnd.c @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2025, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: cmd_rnd.c + * Created Date: 2025-07-07 10:50:46 + * Last Modified: 2025-07-21 19:15:44 + * Description: This file is for secure + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + * v1.0 kangkaiping 2025/07/09 first release + */ + +/***************************** Include Files *********************************/ +#include +#include + +#include "sdkconfig.h" +#ifndef SDK_CONFIG_H__ + #warning "Please include sdkconfig.h" +#endif + +#ifdef CONFIG_USE_LETTER_SHELL +#include "shell.h" +#include "strto.h" +#include +#include + +#include "fsecrnd_test_example.h" + +/* usage info function for spim example */ +static void FGRndExampleUsage(void) +{ + printf("Usage:\r\n"); + printf("rnd ptrng\r\n"); + printf("-- run >> rnd ptrng num (eg:100) at controller.\r\n"); + printf("-- be care of num must less than 4096 .\r\n"); +} + +/* entry function for spim example */ +static int FGRndExampleEntry(int argc, char *argv[]) +{ + int ret = -1; + + /* check input args of example, exit if invaild */ + if (argc < 2) + { + FGRndExampleUsage(); + return -1; + } + + /* parser example input args and run example */ + + if(!strcmp(argv[1], "ptrng")) + { + ret = FSecRndMainPtrng(argc,&argv[1]); + } + + + return ret; +} + +/* register command for spim example */ +SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), rnd, FGRndExampleEntry, rnd example); + +#endif \ No newline at end of file diff --git a/example/peripherals/sec/rnd/src/fsecrnd_test_example.c b/example/peripherals/sec/rnd/src/fsecrnd_test_example.c new file mode 100644 index 000000000..d71c53e50 --- /dev/null +++ b/example/peripherals/sec/rnd/src/fsecrnd_test_example.c @@ -0,0 +1,282 @@ +/* + * Copyright (C) 2025, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: fsecrnd_test_example.c + * Created Date: 2025-07-04 18:21:24 + * Last Modified: 2025-07-21 16:50:35 + * Description: This file is for secure + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + * v1.0 kangkaiping 2025/07/09 first release + */ + +/*************************************** Include Files *******************************************/ +#include +#include +#include "sdkconfig.h" +#include "fparameters.h" +#include "fkernel.h" +#include "ftypes.h" +#include "fdebug.h" + +#include "fparameters.h" +#include "fsec_rnd.h" +#include "fsec_rnd_util.h" +#include "fsecrnd_test_example.h" + +/************************************ Constant Definitions ***************************************/ + +/* + * The following constants map to the XPAR parameters created in the + * xparameters.h file. They are only defined here such that a user can easily + * change all the needed parameters in one place. + */ +#ifndef SDT +#define FSECRND_DEVICE FSEC_RND_0_DEVICE_ID +#else +#define FSECRND_DEVICE FSEC_RND_0_BASEADDR +#endif + +/************************** Constant Definitions *****************************/ +enum +{ + FSEC_RND_EXAMPLE_OK = 0, + FSEC_RND_EXAMPLE_FAILED, +}; +/************************************** Type Definitions *****************************************/ + +/*************************** Macros (Inline Functions) Definitions *******************************/ + +#define FSEC_RND_EXAMPLE_TAG "FSEC_RND_EXAMPLE" +#define FSEC_RND_INFO(format, ...) FT_DEBUG_PRINT_I(FSEC_RND_EXAMPLE_TAG, format, ##__VA_ARGS__) +#define FSEC_RND_WARN(format, ...) FT_DEBUG_PRINT_W(FSEC_RND_EXAMPLE_TAG, format, ##__VA_ARGS__) +#define FSEC_RND_ERROR(format, ...) FT_DEBUG_PRINT_E(FSEC_RND_EXAMPLE_TAG, format, ##__VA_ARGS__) +#define FSEC_RND_DEBUG(format, ...) FT_DEBUG_PRINT_D(FSEC_RND_EXAMPLE_TAG, format, ##__VA_ARGS__) + +/************************************ Function Prototypes ****************************************/ + +#ifndef SDT +int FSecRndPtrngExample(u16 deviceid,u16 randlen); +#else +int FSecRndPtrngExample(uintptr_t baseaddr); +#endif +static void FSecRndPrintBytes(u8 *src, u32 size); + +/************************************ Variable Definitions ***************************************/ +FSecRndCtrl fsec_rnd_ctrl; /* Instance of FSECRND */ +u8 rand_buf[4096]; +/*************************************************************************************************/ +/** + * @brief + * Main function to call the fsec_rnd_ctrl driver example. + * @param buf is the buf pointer + * @param length is the length value from shell + * @return + * - num : generate num. + * + * + **************************************************************************************************/ + + +int FsecArrayToInt(char buf[], int length) +{ + int num = 0; + + for (int i = 0; i < length; i++) { + num = num * 10 + ((u8)buf[i]-48); // 逐位计算 + } + return num; +} + +/*************************************************************************************************/ +/** + * @brief + * Main function to call the FSECRND driver example. + * + * @return + * - FSECRND_SUCCESS if example ran successfully. + * - FSECRND_FAILURE if unsuccessful. + * + **************************************************************************************************/ +int FSecRndMainPtrng(int argc, char **argv) +{ + int status; + char buf[10]; + int randlen; + char *src = argv[1]; + char *dst = buf; + int i=0; + + /* Call the example , specify the device ID that is generated in xparameters.h. */ + FSEC_RND_INFO("****** FSECRND example in PTRNG mode *******\n\r"); + +if(src==NULL) +status = FSecRndPtrngExample(FSECRND_DEVICE,100); +else +{ + while((*dst++ = *src++) != '\0') + { + i++; + } + randlen = FsecArrayToInt(buf,i); +status = FSecRndPtrngExample(FSECRND_DEVICE,randlen); +} + + + if (status != FSECRND_SUCCESS) { + FSEC_RND_DEBUG("FSECRND PTRNG example failed\n\r"); + return FSECRND_FAILURE; + } + + FSEC_RND_INFO("Successfully ran FSECRND PTRNG example\n\r"); + + return FSECRND_SUCCESS; +} + +/*************************************************************************************************/ +/** + * @brief + * This function tests the functioning of the TRNG in PTRNG mode. + * DFDisable is set TRUE and DFDisable set to 0 for non DF. + * + * @param DeviceId is the TRNG_DEVICE_ID value from + * fsec_rnd_hw.h. + * + * @return + * - FSECRND_SUCCESS if example runs successfully + * - FSECRND_FAILURE otherwise. + * + **************************************************************************************************/ +#ifndef SDT +int FSecRndPtrngExample(u16 device_id,u16 rand_len) +#else +int FSecRndPtrngExample(uintptr_t baseaddr) +#endif +{ + int status = FSECRND_SUCCESS; + FSecRndConig *config; + FSecRndUsrConig usr_cfg = { + .mode = FSECRND_PTRNG, + .seed_life = 0U, + .pred_resistance_en = FSEC_RND_FALSE, + .df_disable = FSEC_RND_TRUE, + .df_len_mul = 0U, + .init_seed_present = FSEC_RND_FALSE, + .pers_str_present = FSEC_RND_FALSE + }; + + /* + * Initialize the FSECRND driver so that it's ready to use look up + * configuration in the config table, then initialize it. + */ +#ifndef SDT + config = FSecRndLookupConfig(device_id); +#else + config = FSecRndLookupConfig(baseaddr); +#endif + if (NULL == config) { + FSEC_RND_DEBUG("Lookupconfig Failed \n\r"); + goto end; + } + + /* Initialize the FSECRND driver so that it is ready to use. */ + status = FSecRndCfgInitialize(&fsec_rnd_ctrl, config, config->base_address); + if (status != FSECRND_SUCCESS) { + FSEC_RND_DEBUG("CfgInitialize Failed, status: 0x%08x\n\r", status); + goto end; + } + + status = FSecRndRunHealthTest(&fsec_rnd_ctrl); + if (status != FSECRND_SUCCESS) { + if ((status == FSECRND_ERROR_CERTF) || + (status == FSECRND_ERROR_CERTF_SW_A5_PATTERN)) { + FSEC_RND_DEBUG("RunHealthTest Failed with CERTF related error, status: 0x%08x\n\r", status); + } + else { + FSEC_RND_DEBUG("RunHealthTest Failed, status: 0x%08x\n\r", status); + } + goto end; + } + + /* Instantiate to complete initialization */ + status = FSecRndInstantiate(&fsec_rnd_ctrl, &usr_cfg); + if (status != FSECRND_SUCCESS) { + FSEC_RND_DEBUG("Instantiate failed, status: 0x%08x\n\r", status); + goto end; + } + + /* Invoke Generate twice and print, rand_buf contains random data from last call */ + FSEC_RND_INFO("Generate,rand_buf %p randlen: 0x%08x\n\r",rand_buf, rand_len); + status = FSecRndGenerate(&fsec_rnd_ctrl, rand_buf, sizeof(rand_buf), FSEC_RND_FALSE,rand_len); + if (status != FSECRND_SUCCESS) + { + FSEC_RND_DEBUG("Generate Failed, status: 0x%08x\n\r", status); + goto end; + } + + FSEC_RND_INFO("Generate 1 Random data:\n\r"); + + FSecRndPrintBytes(rand_buf, rand_len); + + status = FSecRndGenerate(&fsec_rnd_ctrl, rand_buf, sizeof(rand_buf), FSEC_RND_FALSE,rand_len); + if (status != FSECRND_SUCCESS) { + FSEC_RND_DEBUG("Generate Failed, status: 0x%08x\n\r", status); + goto end; + } + + FSEC_RND_INFO("Generate 2 Random data:\n\r"); + + FSecRndPrintBytes(rand_buf, rand_len); + + status = FSECRND_SUCCESS; + end: + if (status) + { + f_printf("%s@%d: FSEC RND example Generate [failure].\r\n", __func__, __LINE__); + return FSEC_RND_EXAMPLE_FAILED; + } + else + { + f_printf("%s@%d: FSEC RND example Generate [success].\r\n", __func__, __LINE__); + return FSEC_RND_EXAMPLE_OK; + } + +} + +/*************************************************************************************************/ +/** + * @brief + * This function prints specified number of bytes from an address + * + * @param src is start address from where to print + * + * @param size is size of buffer pointed by src + * + ************************************************************************************************/ +static void FSecRndPrintBytes(u8 *src, u32 size) +{ + u32 index; + + for (index = 0; index < size; index++) { + if (index % 16 == 0) { + FSEC_RND_INFO("\n\r"); + } + FSEC_RND_INFO("0x%02X, ", src[index]); + } + FSEC_RND_INFO("\n\r"); +} diff --git a/example/system/amp/amp_tools_example/figs/amp_make_boot_pic.png b/example/system/amp/amp_tools_example/figs/amp_make_boot_pic.png new file mode 100644 index 0000000000000000000000000000000000000000..4d744b28bfad528a5851b18ad396ddcf65bfa9a6 GIT binary patch literal 184780 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 F{s;AeDwY5M literal 0 HcmV?d00001 diff --git a/example/system/amp/openamp_echo_remoteproc_load/master/fig/openamp_echo_remoteproc_build.png b/example/system/amp/openamp_echo_remoteproc_load/master/fig/openamp_echo_remoteproc_build.png new file mode 100644 index 0000000000000000000000000000000000000000..98bdc4d09318aee8559327fb18d501927e0186c8 GIT binary patch literal 80082 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

I>BP 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 literal 0 HcmV?d00001 diff --git a/example/system/amp/openamp_echo_remoteproc_load/master/fig/openamp_echo_remoteproc_load.png b/example/system/amp/openamp_echo_remoteproc_load/master/fig/openamp_echo_remoteproc_load.png new file mode 100644 index 0000000000000000000000000000000000000000..f160972d7f91decb2958d957fe738944a1a0ac6c GIT binary patch literal 126782 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 Z&_^ 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%0DRQ2b!$R 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 u`_48#X + +/** + * @brief Assertion macro for FreeRTOS applications. + * @param cond Condition to evaluate. + */ +#define metal_sys_assert(cond) assert(cond) + +#endif /* __METAL_FREERTOS_ASSERT__H__ */ + diff --git a/third-party/libmetal/metal/system/freertos/cache.h b/third-party/libmetal/metal/system/freertos/cache.h new file mode 100644 index 000000000..62775fbea --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/cache.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2018, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/cache.h + * @brief FreeRTOS cache operation primitives for libmetal. + */ + +#ifndef __METAL_CACHE__H__ +#error "Include metal/cache.h instead of metal/freertos/cache.h" +#endif + +#ifndef __METAL_FREERTOS_CACHE__H__ +#define __METAL_FREERTOS_CACHE__H__ + +#ifdef __cplusplus +extern "C" { +#endif + +void metal_machine_cache_flush(void *addr, unsigned int len); +void metal_machine_cache_invalidate(void *addr, unsigned int len); + +static inline void __metal_cache_flush(void *addr, unsigned int len) +{ + metal_machine_cache_flush(addr, len); +} + +static inline void __metal_cache_invalidate(void *addr, unsigned int len) +{ + metal_machine_cache_invalidate(addr, len); +} + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_FREERTOS_CACHE__H__ */ diff --git a/third-party/libmetal/metal/system/freertos/condition.c b/third-party/libmetal/metal/system/freertos/condition.c new file mode 100644 index 000000000..e3bebc9d2 --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/condition.c @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file generic/condition.c + * @brief Generic libmetal condition variable handling. + */ + +#include + +int metal_condition_wait(struct metal_condition *cv, + metal_mutex_t *m) +{ + /* TODO: Implement condition variable for FreeRTOS */ + (void)cv; + (void)m; + return 0; +} diff --git a/third-party/libmetal/metal/system/freertos/condition.h b/third-party/libmetal/metal/system/freertos/condition.h new file mode 100644 index 000000000..87f13748b --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/condition.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file generic/condition.h + * @brief Generic condition variable primitives for libmetal. + */ + +#ifndef __METAL_CONDITION__H__ +#error "Include metal/condition.h instead of metal/freertos/condition.h" +#endif + +#ifndef __METAL_FREERTOS_CONDITION__H__ +#define __METAL_FREERTOS_CONDITION__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct metal_condition { + metal_mutex_t *m; /**< mutex. + * The condition variable is attached to this mutex + * when it is waiting. It is also used to check + * correctness in case there are multiple waiters. + */ + + atomic_int v; /**< condition variable value. */ +}; + +/** Static metal condition variable initialization. */ +#define METAL_CONDITION_INIT { NULL, ATOMIC_VAR_INIT(0) } + +static inline void metal_condition_init(struct metal_condition *cv) +{ + /* TODO: Implement condition variable for FreeRTOS */ + (void)cv; +} + +static inline int metal_condition_signal(struct metal_condition *cv) +{ + /* TODO: Implement condition variable for FreeRTOS */ + (void)cv; + return 0; +} + +static inline int metal_condition_broadcast(struct metal_condition *cv) +{ + /* TODO: Implement condition variable for FreeRTOS */ + (void)cv; + return 0; +} + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_FREERTOS_CONDITION__H__ */ diff --git a/third-party/libmetal/metal/system/freertos/device.c b/third-party/libmetal/metal/system/freertos/device.c new file mode 100644 index 000000000..97246b89b --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/device.c @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2017, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/device.c + * @brief FreeRTOS device operations. + */ + +#include +#include +#include + +int metal_generic_dev_sys_open(struct metal_device *dev) +{ + struct metal_io_region *io; + unsigned int i; + + /* map I/O memory regions */ + for (i = 0; i < dev->num_regions; i++) { + io = &dev->regions[i]; + if (!io->size) + break; + metal_sys_io_mem_map(io); + } + + return 0; +} + diff --git a/third-party/libmetal/metal/system/freertos/init.c b/third-party/libmetal/metal/system/freertos/init.c new file mode 100644 index 000000000..664182442 --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/init.c @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/init.c + * @brief FreeRTOS libmetal initialization. + */ + +#include +#include +#include + +struct metal_state _metal; + +int metal_sys_init(const struct metal_init_params *params) +{ + metal_unused(params); + metal_bus_register(&metal_generic_bus); + return 0; +} + +void metal_sys_finish(void) +{ + metal_bus_unregister(&metal_generic_bus); +} diff --git a/third-party/libmetal/metal/system/freertos/io.c b/third-party/libmetal/metal/system/freertos/io.c new file mode 100644 index 000000000..5e4e2f9d1 --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/io.c @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2017, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/io.c + * @brief FreeRTOS libmetal io operations + */ + +#include + +void metal_sys_io_mem_map(struct metal_io_region *io) +{ + unsigned long p; + size_t psize; + size_t *va; + + va = io->virt; + psize = (size_t)io->size; + if (psize) { + if (psize >> io->page_shift) + psize = (size_t)1 << io->page_shift; + for (p = 0; p <= ((io->size - 1) >> io->page_shift); p++) { + metal_machine_io_mem_map(va, io->physmap[p], + psize, io->mem_flags); + va += psize; + } + } +} diff --git a/third-party/libmetal/metal/system/freertos/io.h b/third-party/libmetal/metal/system/freertos/io.h new file mode 100644 index 000000000..3cfe797a8 --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/io.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2017, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/io.h + * @brief FreeRTOS specific io definitions. + */ + +#ifndef __METAL_IO__H__ +#error "Include metal/io.h instead of metal/freertos/io.h" +#endif + +#ifndef __METAL_FREEROTS_IO__H__ +#define __METAL_FREEROTS_IO__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef METAL_INTERNAL + +/** + * @brief memory mapping for an I/O region + */ +void metal_sys_io_mem_map(struct metal_io_region *io); + +/** + * @brief memory mapping + */ +void *metal_machine_io_mem_map(void *va, metal_phys_addr_t pa, + size_t size, unsigned int flags); + +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_FREEROTS_IO__H__ */ diff --git a/third-party/libmetal/metal/system/freertos/irq.c b/third-party/libmetal/metal/system/freertos/irq.c new file mode 100644 index 000000000..3955e3f84 --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/irq.c @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2016 - 2017, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/irq.c + * @brief FreeRTOS libmetal irq definitions. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +unsigned int metal_irq_save_disable(void) +{ + return sys_irq_save_disable(); +} + +void metal_irq_restore_enable(unsigned int flags) +{ + sys_irq_restore_enable(flags); +} + diff --git a/third-party/libmetal/metal/system/freertos/irq.h b/third-party/libmetal/metal/system/freertos/irq.h new file mode 100644 index 000000000..72c11d421 --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/irq.h @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/irq.c + * @brief FreeRTOS libmetal irq definitions. + */ + +#ifndef __METAL_IRQ__H__ +#error "Include metal/irq.h instead of metal/freertos/irq.h" +#endif + +#ifndef __METAL_FREERTOS_IRQ__H__ +#define __METAL_FREERTOS_IRQ__H__ + +#endif /* __METAL_FREERTOS_IRQ__H__ */ diff --git a/third-party/libmetal/metal/system/freertos/log.h b/third-party/libmetal/metal/system/freertos/log.h new file mode 100644 index 000000000..f805c8d5a --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/log.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2018, Linaro Limited. and Contributors. All rights reserved. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * 3. Neither the name of Linaro nor the names of its contributors may be used + * to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * @file freertos/log.h + * @brief FreeRTOS libmetal log handler definition. + */ + +#ifndef __METAL_METAL_LOG__H__ +#error "Include metal/log.h instead of metal/freertos/log.h" +#endif + +#ifndef __METAL_FREERTOS_LOG__H__ +#define __METAL_FREERTOS_LOG__H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_FREERTOS_LOG__H__ */ diff --git a/third-party/libmetal/metal/system/freertos/mutex.h b/third-party/libmetal/metal/system/freertos/mutex.h new file mode 100644 index 000000000..6a70acb8a --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/mutex.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/mutex.h + * @brief FreeRTOS mutex primitives for libmetal. + */ + +#ifndef __METAL_MUTEX__H__ +#error "Include metal/mutex.h instead of metal/freertos/mutex.h" +#endif + +#ifndef __METAL_FREERTOS_MUTEX__H__ +#define __METAL_FREERTOS_MUTEX__H__ + +#include +#include "FreeRTOS.h" +#include "semphr.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + SemaphoreHandle_t m; +} metal_mutex_t; + +/* + * METAL_MUTEX_DEFINE - used for defining and initializing a global or + * static singleton mutex + */ +#define METAL_MUTEX_DEFINE(m) metal_mutex_t m = METAL_MUTEX_INIT(m) + +static inline void __metal_mutex_init(metal_mutex_t *mutex) +{ + metal_assert(mutex); + mutex->m = xSemaphoreCreateMutex(); + metal_assert(mutex->m); +} + +static inline void __metal_mutex_deinit(metal_mutex_t *mutex) +{ + metal_assert(mutex && mutex->m); + vSemaphoreDelete(mutex->m); + mutex->m = NULL; +} + +static inline int __metal_mutex_try_acquire(metal_mutex_t *mutex) +{ + metal_assert(mutex && mutex->m); + return xSemaphoreTake(mutex->m, (TickType_t)0); +} + +static inline void __metal_mutex_acquire(metal_mutex_t *mutex) +{ + metal_assert(mutex && mutex->m); + xSemaphoreTake(mutex->m, portMAX_DELAY); +} + +static inline void __metal_mutex_release(metal_mutex_t *mutex) +{ + metal_assert(mutex && mutex->m); + xSemaphoreGive(mutex->m); +} + +static inline int __metal_mutex_is_acquired(metal_mutex_t *mutex) +{ + metal_assert(mutex && mutex->m); + return (!xSemaphoreGetMutexHolder(mutex->m)) ? 0 : 1; +} + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_FREERTOS_MUTEX__H__ */ diff --git a/third-party/libmetal/metal/system/freertos/shmem.c b/third-party/libmetal/metal/system/freertos/shmem.c new file mode 100644 index 000000000..b0f29f605 --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/shmem.c @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/shmem.c + * @brief FreeRTOS libmetal shared memory handling. + */ + +#include + +int metal_shmem_open(const char *name, size_t size, + struct metal_io_region **io) +{ + return metal_shmem_open_generic(name, size, io); +} diff --git a/third-party/libmetal/metal/system/freertos/sleep.h b/third-party/libmetal/metal/system/freertos/sleep.h new file mode 100644 index 000000000..2ad9994a9 --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/sleep.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2018, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/sleep.h + * @brief FreeRTOS sleep primitives for libmetal. + */ + +#ifndef __METAL_SLEEP__H__ +#error "Include metal/sleep.h instead of metal/freertos/sleep.h" +#endif + +#ifndef __METAL_FREERTOS_SLEEP__H__ +#define __METAL_FREERTOS_SLEEP__H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +static inline int __metal_sleep_usec(unsigned int usec) +{ + const TickType_t xDelay = pdMS_TO_TICKS(usec/1000); + + vTaskDelay(xDelay ? xDelay : 1); + return 0; +} + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_FREERTOS_SLEEP__H__ */ diff --git a/third-party/libmetal/metal/system/freertos/sys.h b/third-party/libmetal/metal/system/freertos/sys.h new file mode 100644 index 000000000..b4350576d --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/sys.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. + * Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/sys.h + * @brief FreeRTOS system primitives for libmetal. + */ + +#ifndef __METAL_SYS__H__ +#error "Include metal/sys.h instead of metal/freertos/sys.h" +#endif + +#ifndef __METAL_FREERTOS_SYS__H__ +#define __METAL_FREERTOS_SYS__H__ + +#include +#include + +#ifdef XLNX_PLATFORM +#include +#else +#include "./@PROJECT_MACHINE@/sys.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef METAL_MAX_DEVICE_REGIONS +#define METAL_MAX_DEVICE_REGIONS 1 +#endif + +#define metal_yield() metal_cpu_yield() + +/** Structure for FreeRTOS libmetal runtime state. */ +struct metal_state { + + /** Common (system independent) data. */ + struct metal_common_state common; +}; + +#ifdef METAL_INTERNAL + +/** + * @brief restore interrupts to state before disable_global_interrupt() + */ +void sys_irq_restore_enable(unsigned int flags); + +/** + * @brief disable all interrupts + */ +unsigned int sys_irq_save_disable(void); + +#endif /* METAL_INTERNAL */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_FREERTOS_SYS__H__ */ diff --git a/third-party/libmetal/metal/system/freertos/template/CMakeLists.txt b/third-party/libmetal/metal/system/freertos/template/CMakeLists.txt new file mode 100644 index 000000000..6da170df4 --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/template/CMakeLists.txt @@ -0,0 +1,4 @@ +collect (PROJECT_LIB_HEADERS sys.h) + +collect (PROJECT_LIB_SOURCES sys.c) + diff --git a/third-party/libmetal/metal/system/freertos/template/sys.c b/third-party/libmetal/metal/system/freertos/template/sys.c new file mode 100644 index 000000000..e8970dc14 --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/template/sys.c @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2018, Linaro Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/template/sys.c + * @brief machine specific system primitives implementation. + */ + +#include +#include +#include +#include + +void sys_irq_restore_enable(unsigned int flags) +{ + metal_unused(flags); + /* Add implementation here */ +} + +unsigned int sys_irq_save_disable(void) +{ + return 0; + /* Add implementation here */ +} + +void sys_irq_enable(unsigned int vector) +{ + metal_unused(vector); + + /* Add implementation here */ +} + +void sys_irq_disable(unsigned int vector) +{ + metal_unused(vector); + + /* Add implementation here */ +} + +void metal_machine_cache_flush(void *addr, unsigned int len) +{ + metal_unused(addr); + metal_unused(len); + + /* Add implementation here */ +} + +void metal_machine_cache_invalidate(void *addr, unsigned int len) +{ + metal_unused(addr); + metal_unused(len); + + /* Add implementation here */ +} + +void metal_generic_default_poll(void) +{ + /* Add implementation here */ +} + +void *metal_machine_io_mem_map(void *va, metal_phys_addr_t pa, + size_t size, unsigned int flags) +{ + metal_unused(pa); + metal_unused(size); + metal_unused(flags); + + /* Add implementation here */ + + return va; +} diff --git a/third-party/libmetal/metal/system/freertos/template/sys.h b/third-party/libmetal/metal/system/freertos/template/sys.h new file mode 100644 index 000000000..7ce091b42 --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/template/sys.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2018, Linaro Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/template/sys.h + * @brief freertos template system primitives for libmetal. + */ + +#ifndef __METAL_FREERTOS_SYS__H__ +#error "Include metal/sys.h instead of metal/freertos/@PROJECT_MACHINE@/sys.h" +#endif + +#ifndef __METAL_FREERTOS_TEMPLATE_SYS__H__ +#define __METAL_FREERTOS_TEMPLATE_SYS__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define metal_yield() metal_cpu_yield() + +#ifdef METAL_INTERNAL + +void sys_irq_enable(unsigned int vector); + +void sys_irq_disable(unsigned int vector); + +#endif /* METAL_INTERNAL */ + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_FREERTOS_SYS__H__ */ diff --git a/third-party/libmetal/metal/system/freertos/time.c b/third-party/libmetal/metal/system/freertos/time.c new file mode 100644 index 000000000..03544eb3b --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/time.c @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/time.c + * @brief freertos libmetal time handling. + */ + +#include +#include +#include + +unsigned long long metal_get_timestamp(void) +{ + return (unsigned long long)(1000 * portTICK_PERIOD_MS * xTaskGetTickCount()); +} + diff --git a/third-party/libmetal/metal/system/freertos/xlnx/CMakeLists.txt b/third-party/libmetal/metal/system/freertos/xlnx/CMakeLists.txt new file mode 100644 index 000000000..704d85fc2 --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/xlnx/CMakeLists.txt @@ -0,0 +1,5 @@ +collect (PROJECT_LIB_HEADERS sys.h) + +collect (PROJECT_LIB_SOURCES irq.c) +collect (PROJECT_LIB_SOURCES sys.c) + diff --git a/third-party/libmetal/metal/system/freertos/xlnx/irq.c b/third-party/libmetal/metal/system/freertos/xlnx/irq.c new file mode 100644 index 000000000..4c35f06a6 --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/xlnx/irq.c @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2016 - 2017, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/xlnx/irq.c + * @brief freertos libmetal Xilinx irq controller definitions. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAX_IRQS XLNX_MAXIRQS + +static struct metal_irq irqs[MAX_IRQS]; /**< Linux IRQs array */ + +static void metal_xlnx_irq_set_enable(struct metal_irq_controller *irq_cntr, + int irq, unsigned int state) +{ + if (irq < irq_cntr->irq_base || + irq >= irq_cntr->irq_base + irq_cntr->irq_num) { + metal_log(METAL_LOG_ERROR, "%s: invalid irq %d\n", + __func__, irq); + return; + } else if (state == METAL_IRQ_ENABLE) { + sys_irq_enable((unsigned int)irq); + } else { + sys_irq_disable((unsigned int)irq); + } +} + +/**< Xilinx common platform IRQ controller */ +static METAL_IRQ_CONTROLLER_DECLARE(xlnx_irq_cntr, + 0, MAX_IRQS, + NULL, + metal_xlnx_irq_set_enable, NULL, + irqs); + +/** + * @brief default handler + */ +void metal_xlnx_irq_isr(void *arg) +{ + unsigned int vector; + + vector = (uintptr_t)arg; + if (vector >= MAX_IRQS) { + return; + } + (void)metal_irq_handle(&irqs[vector], (int)vector); +} + +int metal_xlnx_irq_init(void) +{ + int ret; + + ret = metal_irq_register_controller(&xlnx_irq_cntr); + if (ret < 0) { + metal_log(METAL_LOG_ERROR, "%s: register irq controller failed.\n", + __func__); + return ret; + } + return 0; +} diff --git a/third-party/libmetal/metal/system/freertos/xlnx/sys.c b/third-party/libmetal/metal/system/freertos/xlnx/sys.c new file mode 100644 index 000000000..26f44dddb --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/xlnx/sys.c @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2024, Advanced Micro Devices, Inc. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/xlnx/sys.c + * @brief machine specific system primitives implementation. + */ + +#include +#include +#include +#include +#include +#include "xil_cache.h" +#include "xil_exception.h" +#include "xscugic.h" +#include "xil_mmu.h" + +#if (defined(__aarch64__) || defined(ARMA53_32)) && !defined(SDT) + +#ifdef VERSAL_NET +#include "xcpu_cortexa78.h" +#elif defined(versal) +#include "xcpu_cortexa72.h" +#else +#include "xreg_cortexa53.h" +#endif /* defined(versal) */ + +#elif defined(ARMR5) + +#include "xil_mpu.h" +#include "xreg_cortexr5.h" + +#endif /* (defined(__aarch64__) || defined(ARMA53_32)) && !defined(SDT) */ + +void sys_irq_restore_enable(unsigned int flags) +{ + Xil_ExceptionEnableMask(~flags); +} + +unsigned int sys_irq_save_disable(void) +{ + unsigned int state = mfcpsr() & XIL_EXCEPTION_ALL; + + if (state != XIL_EXCEPTION_ALL) { + Xil_ExceptionDisableMask(XIL_EXCEPTION_ALL); + } + return state; +} + +void metal_machine_cache_flush(void *addr, unsigned int len) +{ + if (!addr && !len) + Xil_DCacheFlush(); + else + Xil_DCacheFlushRange((intptr_t)addr, len); +} + +void metal_machine_cache_invalidate(void *addr, unsigned int len) +{ + if (!addr && !len) + Xil_DCacheInvalidate(); + else + Xil_DCacheInvalidateRange((intptr_t)addr, len); +} + +/** + * @brief poll function until some event happens + */ +void metal_weak metal_generic_default_poll(void) +{ + metal_asm volatile("wfi"); +} + +/* + * VERSAL_NET is used since XMpu_Config structure is + * different for r52(versal net) and r5(zynqmp) to avoid build failure + */ +#ifdef VERSAL_NET +void *metal_machine_io_mem_map_versal_net(void *va, metal_phys_addr_t pa, + size_t size, unsigned int flags) +{ + void *__attribute__((unused)) physaddr; + u32 req_end_addr = pa + size; + XMpu_Config mpu_config; + u32 req_addr = pa; + u32 mmap_req = 1; + u32 base_end_addr; + u32 cnt; + + /* Get the MPU Config enties */ + Xil_GetMPUConfig(mpu_config); + + for (cnt = 0; cnt < MAX_POSSIBLE_MPU_REGS; cnt++) { + + if (!(mpu_config[cnt].flags & XMPU_VALID_REGION)) + continue; + + base_end_addr = mpu_config[cnt].Size + mpu_config[cnt].BaseAddress; + + if (mpu_config[cnt].BaseAddress <= req_addr && base_end_addr >= req_end_addr) { + /* + * Mapping available for requested region in MPU table + * If no change in Attribute for region then additional + * mapping in MPU table is not required + */ + if (mpu_config[cnt].Attribute == flags) { + mmap_req = 0; + break; + } + } + } + + /* if mapping is required we call Xil_MemMap to get the mapping done */ + if (mmap_req == 1) { + physaddr = Xil_MemMap(pa, size, flags); + metal_assert(physaddr == (void *)pa); + } + + return va; +} +#endif + +void *metal_machine_io_mem_map(void *va, metal_phys_addr_t pa, + size_t size, unsigned int flags) +{ + void *__attribute__((unused)) physaddr; + +#ifdef VERSAL_NET + va = metal_machine_io_mem_map_versal_net(va, pa, size, flags); +#else + physaddr = Xil_MemMap(pa, size, flags); + metal_assert(physaddr == (void *)pa); +#endif + return va; +} diff --git a/third-party/libmetal/metal/system/freertos/xlnx/sys.h b/third-party/libmetal/metal/system/freertos/xlnx/sys.h new file mode 100644 index 000000000..7d27de23e --- /dev/null +++ b/third-party/libmetal/metal/system/freertos/xlnx/sys.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * Copyright (c) 2023 Advanced Micro Devices, Inc. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file freertos/xlnx/sys.h + * @brief freertos Xilinx common system primitives for libmetal. + */ + +#ifndef __METAL_FREERTOS_SYS__H__ +#error "Include metal/sys.h instead of metal/freertos/@PROJECT_MACHINE@/sys.h" +#endif + +#ifndef __METAL_FREERTOS_XLNX_SYS__H__ +#define __METAL_FREERTOS_XLNX_SYS__H__ + +#include + +#include "xscugic.h" +#include "FreeRTOS.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define metal_yield() metal_cpu_yield() + +#if defined(SDT) && defined(PLATFORM_ZYNQ) +#define XPAR_SCUGIC_0_DIST_BASEADDR XPAR_SCUGIC_DIST_BASEADDR +#endif + +#ifndef XLNX_MAXIRQS +#define XLNX_MAXIRQS XSCUGIC_MAX_NUM_INTR_INPUTS +#endif + +/** + * @brief metal_xlnx_irq_isr + * + * Xilinx interrupt ISR can be registered to the Xilinx embeddedsw + * IRQ controller driver. + * + * @param[in] arg input argument, interrupt vector id. + */ +void metal_xlnx_irq_isr(void *arg); + +/** + * @brief metal_xlnx_irq_int + * + * Xilinx interrupt controller initialization. It will initialize + * the metal Xilinx IRQ controller data structure. + * + * @return 0 for success, or negative value for failure + */ +int metal_xlnx_irq_init(void); + +static inline void sys_irq_enable(unsigned int vector) +{ +#ifdef PLATFORM_ZYNQ + XScuGic_EnableIntr(XPAR_SCUGIC_0_DIST_BASEADDR, vector); +#else + vPortEnableInterrupt(vector); +#endif +} + +static inline void sys_irq_disable(unsigned int vector) +{ +#ifdef PLATFORM_ZYNQ + XScuGic_DisableIntr(XPAR_SCUGIC_0_DIST_BASEADDR, vector); +#else + vPortDisableInterrupt(vector); +#endif +} + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_FREERTOS_XLNX_SYS__H__ */ diff --git a/third-party/libmetal/metal/system/generic/xlnx/CMakeLists.txt b/third-party/libmetal/metal/system/generic/xlnx/CMakeLists.txt new file mode 100644 index 000000000..af02c7e1f --- /dev/null +++ b/third-party/libmetal/metal/system/generic/xlnx/CMakeLists.txt @@ -0,0 +1,15 @@ +if ("${PROJECT_MACHINE}" STREQUAL "microblaze_generic") + add_subdirectory(microblaze_generic) +else() + collect (PROJECT_LIB_SOURCES sys.c) +endif() + +collect (PROJECT_LIB_HEADERS sys.h) + +collect (PROJECT_LIB_SOURCES irq.c) + +include(CheckSymbolExists) +check_symbol_exists(SDT "bspconfig.h" HAS_SYSTEM_DT) +if (HAS_SYSTEM_DT) + collect (PROJECT_LIB_HEADERS sys_devicetree.h) +endif() diff --git a/third-party/libmetal/metal/system/generic/xlnx/irq.c b/third-party/libmetal/metal/system/generic/xlnx/irq.c new file mode 100644 index 000000000..356993a33 --- /dev/null +++ b/third-party/libmetal/metal/system/generic/xlnx/irq.c @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2016 - 2017, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file generic/xlnx/irq.c + * @brief generic libmetal Xilinx irq controller definitions. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef __MICROBLAZE__ +#define MAX_IRQS 32 +#else +#define MAX_IRQS XLNX_MAXIRQS +#endif + +static struct metal_irq irqs[MAX_IRQS]; /**< Linux IRQs array */ + +static void metal_xlnx_irq_set_enable(struct metal_irq_controller *irq_cntr, + int irq, unsigned int state) +{ + if (irq < irq_cntr->irq_base || + irq >= irq_cntr->irq_base + irq_cntr->irq_num) { + metal_log(METAL_LOG_ERROR, "%s: invalid irq %d\n", + __func__, irq); + return; + } else if (state == METAL_IRQ_ENABLE) { + sys_irq_enable((unsigned int)irq); + } else { + sys_irq_disable((unsigned int)irq); + } +} + +/**< Xilinx common platform IRQ controller */ +static METAL_IRQ_CONTROLLER_DECLARE(xlnx_irq_cntr, + 0, MAX_IRQS, + NULL, + metal_xlnx_irq_set_enable, NULL, + irqs); + +/** + * @brief default handler + */ +void metal_xlnx_irq_isr(void *arg) +{ + unsigned int vector; + + vector = (uintptr_t)arg; + if (vector >= MAX_IRQS) { + return; + } + (void)metal_irq_handle(&irqs[vector], (int)vector); +} + +int metal_xlnx_irq_init(void) +{ + int ret; + + ret = metal_irq_register_controller(&xlnx_irq_cntr); + if (ret < 0) { + metal_log(METAL_LOG_ERROR, "%s: register irq controller failed.\n", + __func__); + return ret; + } + return 0; +} diff --git a/third-party/libmetal/metal/system/generic/xlnx/microblaze_generic/CMakeLists.txt b/third-party/libmetal/metal/system/generic/xlnx/microblaze_generic/CMakeLists.txt new file mode 100644 index 000000000..621e12c51 --- /dev/null +++ b/third-party/libmetal/metal/system/generic/xlnx/microblaze_generic/CMakeLists.txt @@ -0,0 +1,6 @@ +collect (PROJECT_LIB_SOURCES sys.c) + +check_include_files(xintc.h HAS_XINTC) +if (HAS_XINTC) + add_definitions(-DHAS_XINTC) +endif(HAS_XINTC) diff --git a/third-party/libmetal/metal/system/generic/xlnx/microblaze_generic/sys.c b/third-party/libmetal/metal/system/generic/xlnx/microblaze_generic/sys.c new file mode 100644 index 000000000..7d18bcf96 --- /dev/null +++ b/third-party/libmetal/metal/system/generic/xlnx/microblaze_generic/sys.c @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2017, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file generic/xlnx/microblaze_generic/sys.c + * @brief machine specific system primitives implementation. + */ + +#include +#include + +#ifdef HAS_XINTC +#include +#endif /* HAS_XINTC */ + +#define MSR_IE 0x2UL /* MicroBlaze status register interrupt enable mask */ + +#if (XPAR_MICROBLAZE_USE_MSR_INSTR != 0) +unsigned int sys_irq_save_disable(void) +{ + unsigned int state; + + metal_asm volatile(" mfs %0, rmsr\n" + " msrclr r0, %1\n" + : "=r"(state) + : "i"(MSR_IE) + : "memory"); + + return state &= MSR_IE; +} + +void sys_irq_restore_enable(unsigned int flags) +{ + unsigned int tmp; + + if (flags) + metal_asm volatile(" msrset %0, %1\n" + : "=r"(tmp) + : "i"(MSR_IE) + : "memory"); +} + +#else /* XPAR_MICROBLAZE_USE_MSR_INSTR == 0 */ +unsigned int sys_irq_save_disable(void) +{ + unsigned int tmp, state; + + metal_asm volatile (" mfs %0, rmsr\n" + " andi %1, %0, %2\n" + " mts rmsr, %1\n" + : "=r"(state), "=r"(tmp) + : "i"(~MSR_IE) + : "memory"); + + return state &= MSR_IE; +} + +void sys_irq_restore_enable(unsigned int flags) +{ + unsigned int tmp; + + if (flags) + metal_asm volatile(" mfs %0, rmsr\n" + " or %0, %0, %1\n" + " mts rmsr, %0\n" + : "=r"(tmp) + : "r"(flags) + : "memory"); +} +#endif /* XPAR_MICROBLAZE_USE_MSR_INSTR */ + +static void sys_irq_change(unsigned int vector, int is_enable) +{ +#ifdef HAS_XINTC + XIntc_Config *cfgptr; + unsigned int ier; + unsigned int mask; + + mask = 1 >> ((vector%32)-1); /* set bit corresponding to interrupt */ + mask = is_enable ? mask : ~mask; /* if disable then turn off bit */ + + cfgptr = XIntc_LookupConfig(vector/32); + Xil_AssertVoid(cfgptr != NULL); + Xil_AssertVoid(vector < XPAR_INTC_MAX_NUM_INTR_INPUTS); + + ier = XIntc_In32(cfgptr->BaseAddress + XIN_IER_OFFSET); + + XIntc_Out32(cfgptr->BaseAddress + XIN_IER_OFFSET, + (ier | mask)); +#else + (void)vector; + (void)is_enable; + metal_assert(0); +#endif +} + +void metal_weak sys_irq_enable(unsigned int vector) +{ + sys_irq_change(vector, 1); +} + +void metal_weak sys_irq_disable(unsigned int vector) +{ + sys_irq_change(vector, 0); +} + + +void metal_machine_cache_flush(void *addr, unsigned int len) +{ + if (!addr && !len) { + Xil_DCacheFlush(); + } else{ + Xil_DCacheFlushRange((intptr_t)addr, len); + } +} + +void metal_machine_cache_invalidate(void *addr, unsigned int len) +{ + if (!addr && !len) { + Xil_DCacheInvalidate(); + } else { + Xil_DCacheInvalidateRange((intptr_t)addr, len); + } +} + +/** + * @brief make microblaze wait + */ +void metal_weak metal_generic_default_poll(void) +{ + metal_asm volatile("nop"); +} + +void *metal_machine_io_mem_map(void *va, metal_phys_addr_t pa, + size_t size, unsigned int flags) +{ + (void)pa; + (void)size; + (void)flags; + return va; +} diff --git a/third-party/libmetal/metal/system/generic/xlnx/sys.c b/third-party/libmetal/metal/system/generic/xlnx/sys.c new file mode 100644 index 000000000..f5d12f4b7 --- /dev/null +++ b/third-party/libmetal/metal/system/generic/xlnx/sys.c @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2022, Xilinx Inc. and Contributors. All rights reserved. + * Copyright (c) 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file generic/xlnx/sys.c + * @brief machine specific system primitives implementation. + */ + +#include +#include + +#include "xil_mmu.h" + +/* System Device Tree (SDT) flow does not have the files generated. */ +#if (defined(__aarch64__) || defined(ARMA53_32)) && !defined(SDT) + +#ifdef VERSAL_NET +#include "xcpu_cortexa78.h" +#elif defined(versal) +#include "xcpu_cortexa72.h" +#else +#include "xreg_cortexa53.h" +#endif /* defined(versal) */ + +#elif defined(ARMR5) + +#include "xil_mpu.h" +#include "xreg_cortexr5.h" + +#endif /* (defined(__aarch64__) || defined(ARMA53_32)) && !defined(SDT) */ + +void sys_irq_restore_enable(unsigned int flags) +{ + Xil_ExceptionEnableMask(~flags); +} + +unsigned int sys_irq_save_disable(void) +{ + unsigned int state = mfcpsr() & XIL_EXCEPTION_ALL; + + if (state != XIL_EXCEPTION_ALL) + Xil_ExceptionDisableMask(XIL_EXCEPTION_ALL); + + return state; +} + +void metal_machine_cache_flush(void *addr, unsigned int len) +{ + if (!addr && !len) + Xil_DCacheFlush(); + else + Xil_DCacheFlushRange((intptr_t)addr, len); +} + +void metal_machine_cache_invalidate(void *addr, unsigned int len) +{ + if (!addr && !len) + Xil_DCacheInvalidate(); + else + Xil_DCacheInvalidateRange((intptr_t)addr, len); +} + +/** + * @brief poll function until some event happens + */ +void metal_weak metal_generic_default_poll(void) +{ + metal_asm volatile("wfi"); +} + +/* + * VERSAL_NET is used since XMpu_Config structure is + * different for r52(versal net) and r5(zynqmp) to avoid build failure + */ +#ifdef VERSAL_NET +void *metal_machine_io_mem_map_versal_net(void *va, metal_phys_addr_t pa, + size_t size, unsigned int flags) +{ + void *__attribute__((unused)) physaddr; + u32 req_end_addr = pa + size; + XMpu_Config mpu_config; + u32 req_addr = pa; + u32 mmap_req = 1; + u32 base_end_addr; + u32 cnt; + + /* Get the MPU Config enties */ + Xil_GetMPUConfig(mpu_config); + + for (cnt = 0; cnt < MAX_POSSIBLE_MPU_REGS; cnt++) { + + if (!(mpu_config[cnt].flags & XMPU_VALID_REGION)) + continue; + + base_end_addr = mpu_config[cnt].Size + mpu_config[cnt].BaseAddress; + + if (mpu_config[cnt].BaseAddress <= req_addr && base_end_addr >= req_end_addr) { + /* + * Mapping available for requested region in MPU table + * If no change in Attribute for region then additional + * mapping in MPU table is not required + */ + if (mpu_config[cnt].Attribute == flags) { + mmap_req = 0; + break; + } + } + } + + /* if mapping is required we call Xil_MemMap to get the mapping done */ + if (mmap_req == 1) { + physaddr = Xil_MemMap(pa, size, flags); + metal_assert(physaddr == (void *)pa); + } + + return va; +} +#endif + +void *metal_machine_io_mem_map(void *va, metal_phys_addr_t pa, + size_t size, unsigned int flags) +{ + void *__attribute__((unused)) physaddr; + +#ifdef VERSAL_NET + va = metal_machine_io_mem_map_versal_net(va, pa, size, flags); +#else + physaddr = Xil_MemMap(pa, size, flags); + metal_assert(physaddr == (void *)pa); +#endif + return va; +} diff --git a/third-party/libmetal/metal/system/generic/xlnx/sys.h b/third-party/libmetal/metal/system/generic/xlnx/sys.h new file mode 100644 index 000000000..0b352de6f --- /dev/null +++ b/third-party/libmetal/metal/system/generic/xlnx/sys.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. + * Copyright (C) 2023, Advanced Micro Devices, Inc. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file generic/xlnx/sys.h + * @brief generic xlnx system primitives for libmetal. + */ + +#ifndef __METAL_GENERIC_SYS__H__ +#error "Include metal/sys.h instead of metal/generic/@PROJECT_MACHINE@/sys.h" +#endif + +#ifndef __MICROBLAZE__ +#include "xscugic.h" +#endif + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#ifdef SDT +#include +#endif + +#ifndef __METAL_GENERIC_XLNX_SYS__H__ +#define __METAL_GENERIC_XLNX_SYS__H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef __MICROBLAZE__ +#define XLNX_MAXIRQS XSCUGIC_MAX_NUM_INTR_INPUTS +#endif + +#if defined(SDT) && !defined(__MICROBLAZE__) +#define XPAR_SCUGIC_0_DIST_BASEADDR XPAR_SCUGIC_DIST_BASEADDR +#endif + +/** + * @brief metal_xlnx_irq_isr + * + * Xilinx interrupt ISR can be registered to the Xilinx embeddedsw + * IRQ controller driver. + * + * @param[in] arg input argument, interrupt vector id. + */ +void metal_xlnx_irq_isr(void *arg); + +/** + * @brief metal_xlnx_irq_int + * + * Xilinx interrupt controller initialization. It will initialize + * the metal Xilinx IRQ controller data structure. + * + * @return 0 for success, or negative value for failure + */ +int metal_xlnx_irq_init(void); + +/* Microblaze defines these routines */ +#ifdef __MICROBLAZE__ +void metal_weak sys_irq_enable(unsigned int vector); + +void metal_weak sys_irq_disable(unsigned int vector); +#else +static inline void sys_irq_enable(unsigned int vector) +{ + XScuGic_EnableIntr(XPAR_SCUGIC_0_DIST_BASEADDR, vector); +} + +static inline void sys_irq_disable(unsigned int vector) +{ + XScuGic_DisableIntr(XPAR_SCUGIC_0_DIST_BASEADDR, vector); +} +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_GENERIC_XLNX_SYS__H__ */ diff --git a/third-party/libmetal/metal/system/generic/xlnx/sys_devicetree.h b/third-party/libmetal/metal/system/generic/xlnx/sys_devicetree.h new file mode 100644 index 000000000..ee9d6c167 --- /dev/null +++ b/third-party/libmetal/metal/system/generic/xlnx/sys_devicetree.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file generic/xlnx/sys_devicetree.h + * @brief Xilinx-AMD Specific symbols for System Device Tree Flow + */ + +#ifndef __METAL_GENERIC_SYS_XLNX_SYS_DEVICETREE_H__ +#define __METAL_GENERIC_SYS_XLNX_SYS_DEVICETREE_H__ + +/* The Xilinx-AMD System Device Tree (SDT) Flow BSP provides this file. */ +#include "bspconfig.h" + +#ifndef XPAR_SCUGIC_0_DEVICE_ID +#define XPAR_SCUGIC_0_DEVICE_ID XPAR_SCUGIC_SINGLE_DEVICE_ID +#endif + +#ifndef XPAR_SCUGIC_0_DIST_BASEADDR +#define XPAR_SCUGIC_0_DIST_BASEADDR XPAR_SCUGIC_DIST_BASEADDR +#endif +#endif /* __METAL_GENERIC_SYS_XLNX_SYS_DEVICETREE_H__ */ diff --git a/third-party/libmetal/metal/system/nuttx/CMakeLists.txt b/third-party/libmetal/metal/system/nuttx/CMakeLists.txt new file mode 100644 index 000000000..3c29a4325 --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/CMakeLists.txt @@ -0,0 +1,19 @@ +collect (PROJECT_LIB_HEADERS alloc.h) +collect (PROJECT_LIB_HEADERS assert.h) +collect (PROJECT_LIB_HEADERS cache.h) +collect (PROJECT_LIB_HEADERS condition.h) +collect (PROJECT_LIB_HEADERS io.h) +collect (PROJECT_LIB_HEADERS irq.h) +collect (PROJECT_LIB_HEADERS log.h) +collect (PROJECT_LIB_HEADERS mutex.h) +collect (PROJECT_LIB_HEADERS sleep.h) +collect (PROJECT_LIB_HEADERS sys.h) + +collect (PROJECT_LIB_SOURCES condition.c) +collect (PROJECT_LIB_SOURCES device.c) +collect (PROJECT_LIB_SOURCES init.c) +collect (PROJECT_LIB_SOURCES io.c) +collect (PROJECT_LIB_SOURCES irq.c) +collect (PROJECT_LIB_SOURCES shmem.c) +collect (PROJECT_LIB_SOURCES time.c) + diff --git a/third-party/libmetal/metal/system/nuttx/alloc.h b/third-party/libmetal/metal/system/nuttx/alloc.h new file mode 100644 index 000000000..0173cadd1 --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/alloc.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file nuttx/alloc.h + * @brief nuttx libmetal memory allocattion definitions. + */ + +#ifndef __METAL_ALLOC__H__ +#error "Include metal/alloc.h instead of metal/nuttx/alloc.h" +#endif + +#ifndef __METAL_NUTTX_ALLOC__H__ +#define __METAL_NUTTX_ALLOC__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +static inline void *__metal_allocate_memory(unsigned int size) +{ + return kmm_malloc(size); +} + +static inline void __metal_free_memory(void *ptr) +{ + kmm_free(ptr); +} + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_NUTTX_ALLOC__H__ */ diff --git a/third-party/libmetal/metal/system/nuttx/assert.h b/third-party/libmetal/metal/system/nuttx/assert.h new file mode 100644 index 000000000..e14cb0b11 --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/assert.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file assert.h + * @brief NuttX assertion support. + */ + +#ifndef __METAL_ASSERT__H__ +#error "Include metal/assert.h instead of metal/nuttx/assert.h" +#endif + +#ifndef __METAL_NUTTX_ASSERT__H__ +#define __METAL_NUTTX_ASSERT__H__ + +#include + +/** + * @brief Assertion macro for NuttX-based applications. + * @param cond Condition to evaluate. + */ +#define metal_sys_assert(cond) DEBUGASSERT(cond) + +#endif /* __METAL_NUTTX_ASSERT__H__ */ diff --git a/third-party/libmetal/metal/system/nuttx/cache.h b/third-party/libmetal/metal/system/nuttx/cache.h new file mode 100644 index 000000000..e3b605242 --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/cache.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file nuttx/cache.h + * @brief NuttX cache operation primitives for libmetal. + */ + +#ifndef __METAL_CACHE__H__ +#error "Include metal/cache.h instead of metal/nuttx/cache.h" +#endif + +#ifndef __METAL_NUTTX_CACHE__H__ +#define __METAL_NUTTX_CACHE__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +static inline void __metal_cache_flush(void *addr, unsigned int len) +{ + up_clean_dcache((uintptr_t)addr, (uintptr_t)addr + len); +} + +static inline void __metal_cache_invalidate(void *addr, unsigned int len) +{ + up_invalidate_dcache((uintptr_t)addr, (uintptr_t)addr + len); +} + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_NUTTX_CACHE__H__ */ diff --git a/third-party/libmetal/metal/system/nuttx/condition.c b/third-party/libmetal/metal/system/nuttx/condition.c new file mode 100644 index 000000000..b4c6cb019 --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/condition.c @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file nuttx/condition.c + * @brief NuttX libmetal condition variable handling. + */ + +#include +#include + +int metal_condition_wait(struct metal_condition *cv, + metal_mutex_t *m) +{ + unsigned int flags; + + /* Check if the mutex has been acquired */ + if (!cv || !m || !metal_mutex_is_acquired(m)) + return -EINVAL; + + flags = metal_irq_save_disable(); + /* Release the mutex first. */ + metal_mutex_release(m); + nxsem_wait_uninterruptible(&cv->cond.sem); + metal_irq_restore_enable(flags); + /* Acquire the mutex again. */ + metal_mutex_acquire(m); + return 0; +} diff --git a/third-party/libmetal/metal/system/nuttx/condition.h b/third-party/libmetal/metal/system/nuttx/condition.h new file mode 100644 index 000000000..22d65073b --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/condition.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file nuttx/condition.h + * @brief NuttX condition variable primitives for libmetal. + */ + +#ifndef __METAL_CONDITION__H__ +#error "Include metal/condition.h instead of metal/nuttx/condition.h" +#endif + +#ifndef __METAL_NUTTX_CONDITION__H__ +#define __METAL_NUTTX_CONDITION__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct metal_condition { + pthread_cond_t cond; +}; + +/** Static metal condition variable initialization. */ +#define METAL_CONDITION_INIT {PTHREAD_COND_INITIALIZER} + +static inline void metal_condition_init(struct metal_condition *cv) +{ + pthread_cond_init(&cv->cond, NULL); +} + +static inline int metal_condition_signal(struct metal_condition *cv) +{ + return -pthread_cond_signal(&cv->cond); +} + +static inline int metal_condition_broadcast(struct metal_condition *cv) +{ + return -pthread_cond_broadcast(&cv->cond); +} + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_NUTTX_CONDITION__H__ */ diff --git a/third-party/libmetal/metal/system/nuttx/device.c b/third-party/libmetal/metal/system/nuttx/device.c new file mode 100644 index 000000000..9644231c5 --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/device.c @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file nuttx/device.c + * @brief NuttX libmetal device definitions. + */ + +#include + +int metal_generic_dev_sys_open(struct metal_device *dev) +{ + metal_unused(dev); + + return 0; +} diff --git a/third-party/libmetal/metal/system/nuttx/init.c b/third-party/libmetal/metal/system/nuttx/init.c new file mode 100644 index 000000000..26d3ebb77 --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/init.c @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file nuttx/init.c + * @brief NuttX libmetal initialization. + */ + +#include +#include +#include + +struct metal_state _metal; + +int metal_sys_init(const struct metal_init_params *params) +{ + int ret = metal_cntr_irq_init(); + metal_unused(params); + + if (ret >= 0) + ret = metal_bus_register(&metal_generic_bus); + return ret; +} + +void metal_sys_finish(void) +{ + metal_bus_unregister(&metal_generic_bus); +} diff --git a/third-party/libmetal/metal/system/nuttx/io.c b/third-party/libmetal/metal/system/nuttx/io.c new file mode 100644 index 000000000..9d4d6d382 --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/io.c @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include +#include +#include + +static uint64_t metal_io_read_(struct metal_io_region *io, + unsigned long offset, + memory_order order, + int width) +{ + uint64_t value = 0; + metal_unused(order); + + metal_io_block_read(io, offset, &value, width); + return value; +} + +static void metal_io_write_(struct metal_io_region *io, + unsigned long offset, + uint64_t value, + memory_order order, + int width) +{ + metal_unused(order); + + metal_io_block_write(io, offset, &value, width); +} + +static int metal_io_block_read_(struct metal_io_region *io, + unsigned long offset, + void *restrict dst, + memory_order order, + int len) +{ + void *va = metal_io_virt(io, offset); + metal_unused(order); + + metal_cache_invalidate(va, len); + if (len == 1) + *(uint8_t *)dst = *(uint8_t *)va; + else if (len == 2) + *(uint16_t *)dst = *(uint16_t *)va; + else if (len == 4) + *(uint32_t *)dst = *(uint32_t *)va; + else if (len == 8) { + *(uint32_t *)dst = *(uint32_t *)va; + *((uint32_t *)dst + 1) = *((uint32_t *)va + 1); + } else + memcpy(dst, va, len); + + return len; +} + +static int metal_io_block_write_(struct metal_io_region *io, + unsigned long offset, + const void *restrict src, + memory_order order, + int len) +{ + void *va = metal_io_virt(io, offset); + metal_unused(order); + + if (len == 1) + *(uint8_t *)va = *(uint8_t *)src; + else if (len == 2) + *(uint16_t *)va = *(uint16_t *)src; + else if (len == 4) + *(uint32_t *)va = *(uint32_t *)src; + else if (len == 8) { + *(uint32_t *)va = *(uint32_t *)src; + *((uint32_t *)va + 1) = *((uint32_t *)src + 1); + } else + memcpy(va, src, len); + + metal_cache_flush(va, len); + + return len; +} + +static void metal_io_block_set_(struct metal_io_region *io, + unsigned long offset, + unsigned char value, + memory_order order, + int len) +{ + void *va = metal_io_virt(io, offset); + metal_unused(order); + + memset(va, value, len); + metal_cache_flush(va, len); +} + +static void metal_io_close_(struct metal_io_region *io) +{ + metal_unused(io); +} + +static metal_phys_addr_t metal_io_offset_to_phys_(struct metal_io_region *io, + unsigned long offset) +{ + return up_addrenv_va_to_pa((void *)((uintptr_t)io->virt + offset)); +} + +static unsigned long metal_io_phys_to_offset_(struct metal_io_region *io, + metal_phys_addr_t phys) +{ + return (uintptr_t)up_addrenv_pa_to_va(phys) - (uintptr_t)io->virt; +} + +static metal_phys_addr_t metal_io_phys_start_; + +static struct metal_io_region metal_io_region_ = { + .virt = NULL, + .physmap = &metal_io_phys_start_, + .size = (size_t)-1, + .page_shift = sizeof(metal_phys_addr_t) * CHAR_BIT, + .page_mask = (metal_phys_addr_t)-1, + .mem_flags = 0, + .ops = { + .read = metal_io_read_, + .write = metal_io_write_, + .block_read = metal_io_block_read_, + .block_write = metal_io_block_write_, + .block_set = metal_io_block_set_, + .close = metal_io_close_, + .offset_to_phys = metal_io_offset_to_phys_, + .phys_to_offset = metal_io_phys_to_offset_, + }, +}; + +struct metal_io_ops *metal_io_get_ops(void) +{ + return &metal_io_region_.ops; +} + +struct metal_io_region *metal_io_get_region(void) +{ + return &metal_io_region_; +} diff --git a/third-party/libmetal/metal/system/nuttx/io.h b/third-party/libmetal/metal/system/nuttx/io.h new file mode 100644 index 000000000..743b7b19c --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/io.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file nuttx/io.h + * @brief NuttX specific io definitions. + */ + +#ifndef __METAL_IO__H__ +#error "Include metal/io.h instead of metal/nuttx/io.h" +#endif + +#ifndef __METAL_NUTTX_IO__H__ +#define __METAL_NUTTX_IO__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Get the default global io ops. + * @return an io ops. + */ +struct metal_io_ops *metal_io_get_ops(void); + +/** + * @brief Get the default global io region. + * @return an io region. + */ +struct metal_io_region *metal_io_get_region(void); + +#ifdef METAL_INTERNAL + +/** + * @brief memory mapping for an I/O region + */ +static inline void metal_sys_io_mem_map(struct metal_io_region *io) +{ + metal_unused(io); +} +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_NUTTX_IO__H__ */ diff --git a/third-party/libmetal/metal/system/nuttx/irq.c b/third-party/libmetal/metal/system/nuttx/irq.c new file mode 100644 index 000000000..34e0edbf4 --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/irq.c @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file nuttx/irq.c + * @brief NuttX libmetal irq definitions. + */ + +#include +#include +#include +#include +#include + +unsigned int metal_irq_save_disable(void) +{ + return up_irq_save(); +} + +void metal_irq_restore_enable(unsigned int flags) +{ + up_irq_restore(flags); +} + +/* Implement the default irq controller */ +static void metal_cntr_irq_set_enable(struct metal_irq_controller *cntr, + int irq, unsigned int enable) +{ +#ifndef CONFIG_ARCH_NOINTC + if (irq >= 0 && irq < cntr->irq_num) { + if (enable == METAL_IRQ_ENABLE) + up_enable_irq(irq); + else + up_disable_irq(irq); + } +#endif +} + +static int metal_cntr_irq_handler(int irq, void *context, void *data) +{ + if (context != NULL) + return metal_irq_handle(data, irq); + + /* context == NULL mean unregister */ + irqchain_detach(irq, metal_cntr_irq_handler, data); + metal_free_memory(data); + return 0; +} + +static int metal_cntr_irq_attach(struct metal_irq_controller *cntr, + int irq, metal_irq_handler hd, void *arg) +{ + if (irq < 0 || irq >= cntr->irq_num) + return -EINVAL; + + if (hd) { + struct metal_irq *data; + + data = metal_allocate_memory(sizeof(*data)); + if (data == NULL) + return -ENOMEM; + + data->hd = hd; + data->arg = arg; + + irq_attach(irq, metal_cntr_irq_handler, data); + } else { + unsigned int flags; + + flags = metal_irq_save_disable(); + irq_dispatch(irq, NULL); /* fake a irq request */ + metal_irq_restore_enable(flags); + } + + return 0; +} + +int metal_cntr_irq_init(void) +{ + static METAL_IRQ_CONTROLLER_DECLARE(metal_cntr_irq, + 0, + NR_IRQS ? NR_IRQS : 1, + NULL, + metal_cntr_irq_set_enable, + metal_cntr_irq_attach, + NULL); + return metal_irq_register_controller(&metal_cntr_irq); +} diff --git a/third-party/libmetal/metal/system/nuttx/irq.h b/third-party/libmetal/metal/system/nuttx/irq.h new file mode 100644 index 000000000..b9d5bc7c0 --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/irq.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file nuttx/irq.h + * @brief NuttX libmetal irq definitions. + */ + +#ifndef __METAL_IRQ__H__ +#error "Include metal/irq.h instead of metal/nuttx/irq.h" +#endif + +#ifndef __METAL_NUTTX_IRQ__H__ +#define __METAL_NUTTX_IRQ__H__ + +#ifdef __cplusplus +extern "C" { +#endif + +int metal_cntr_irq_init(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_NUTTX_IRQ__H__ */ diff --git a/third-party/libmetal/metal/system/nuttx/log.h b/third-party/libmetal/metal/system/nuttx/log.h new file mode 100644 index 000000000..5f318c7bf --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/log.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file nuttx/log.h + * @brief NuttX libmetal log handler definition. + */ + +#ifndef __METAL_METAL_LOG__H__ +#error "Include metal/log.h instead of metal/nuttx/log.h" +#endif + +#ifndef __METAL_NUTTX_LOG__H__ +#define __METAL_NUTTX_LOG__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_NUTTX_LOG__H__ */ diff --git a/third-party/libmetal/metal/system/nuttx/mutex.h b/third-party/libmetal/metal/system/nuttx/mutex.h new file mode 100644 index 000000000..26ec4f904 --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/mutex.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file nuttx/mutex.h + * @brief NuttX mutex primitives for libmetal. + */ + +#ifndef __METAL_MUTEX__H__ +#error "Include metal/mutex.h instead of metal/nuttx/mutex.h" +#endif + +#ifndef __METAL_NUTTX_MUTEX__H__ +#define __METAL_NUTTX_MUTEX__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef mutex_t metal_mutex_t; + +/* + * METAL_MUTEX_INIT - used for initializing an mutex element in a static struct + * or global + */ +#define METAL_MUTEX_INIT(m) NXMUTEX_INITIALIZER +/* + * METAL_MUTEX_DEFINE - used for defining and initializing a global or + * static singleton mutex + */ +#define METAL_MUTEX_DEFINE(m) metal_mutex_t m = NXMUTEX_INITIALIZER + +static inline void __metal_mutex_init(metal_mutex_t *mutex) +{ + nxmutex_init(mutex); +} + +static inline void __metal_mutex_deinit(metal_mutex_t *mutex) +{ + nxmutex_destroy(mutex); +} + +static inline int __metal_mutex_try_acquire(metal_mutex_t *mutex) +{ + return nxmutex_trylock(mutex); +} + +static inline void __metal_mutex_acquire(metal_mutex_t *mutex) +{ + nxmutex_lock(mutex); +} + +static inline void __metal_mutex_release(metal_mutex_t *mutex) +{ + nxmutex_unlock(mutex); +} + +static inline int __metal_mutex_is_acquired(metal_mutex_t *mutex) +{ + return nxmutex_is_locked(mutex); +} + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_NUTTX_MUTEX__H__ */ diff --git a/third-party/libmetal/metal/system/nuttx/shmem.c b/third-party/libmetal/metal/system/nuttx/shmem.c new file mode 100644 index 000000000..1db4481e2 --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/shmem.c @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file nuttx/shmem.c + * @brief NuttX libmetal shared memory handling. + */ + +#include + +int metal_shmem_open(const char *name, size_t size, + struct metal_io_region **io) +{ + return metal_shmem_open_generic(name, size, io); +} diff --git a/third-party/libmetal/metal/system/nuttx/sleep.h b/third-party/libmetal/metal/system/nuttx/sleep.h new file mode 100644 index 000000000..c875ab666 --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/sleep.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file nuttx/sleep.h + * @brief NuttX sleep primitives for libmetal. + */ + +#ifndef __METAL_SLEEP__H__ +#error "Include metal/sleep.h instead of metal/nuttx/sleep.h" +#endif + +#ifndef __METAL_NUTTX_SLEEP__H__ +#define __METAL_NUTTX_SLEEP__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +static inline int __metal_sleep_usec(unsigned int usec) +{ + return nxsig_usleep(usec); +} + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_NUTTX_SLEEP__H__ */ diff --git a/third-party/libmetal/metal/system/nuttx/sys.h b/third-party/libmetal/metal/system/nuttx/sys.h new file mode 100644 index 000000000..e188e866a --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/sys.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file nuttx/sys.h + * @brief NuttX system primitives for libmetal. + */ + +#ifndef __METAL_SYS__H__ +#error "Include metal/sys.h instead of metal/nuttx/sys.h" +#endif + +#ifndef __METAL_NUTTX_SYS__H__ +#define __METAL_NUTTX_SYS__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define metal_yield() metal_sleep_usec(1000) + +#define METAL_INIT_DEFAULTS \ +{ \ + .log_handler = (metal_log_handler)syslog, \ + .log_level = METAL_LOG_INFO, \ +} + +/** Structure of nuttx libmetal runtime state. */ +struct metal_state { + + /** Common (system independent) data. */ + struct metal_common_state common; +}; + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_NUTTX_SYS__H__ */ diff --git a/third-party/libmetal/metal/system/nuttx/time.c b/third-party/libmetal/metal/system/nuttx/time.c new file mode 100644 index 000000000..986f1ba18 --- /dev/null +++ b/third-party/libmetal/metal/system/nuttx/time.c @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2018, Pinecone Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file nuttx/time.c + * @brief NuttX libmetal time handling. + */ + +#include +#include + +unsigned long long metal_get_timestamp(void) +{ + unsigned long long t = 0; + struct timespec tp; + int r; + + r = clock_systime_timespec(&tp); + if (!r) { + t = (unsigned long long)tp.tv_sec * NSEC_PER_SEC; + t += tp.tv_nsec; + } + return t; +} diff --git a/third-party/libmetal/metal/system/zephyr/CMakeLists.txt b/third-party/libmetal/metal/system/zephyr/CMakeLists.txt new file mode 100644 index 000000000..cc1fd534b --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/CMakeLists.txt @@ -0,0 +1,21 @@ +collect (PROJECT_LIB_HEADERS alloc.h) +collect (PROJECT_LIB_HEADERS assert.h) +collect (PROJECT_LIB_HEADERS cache.h) +collect (PROJECT_LIB_HEADERS condition.h) +collect (PROJECT_LIB_HEADERS io.h) +collect (PROJECT_LIB_HEADERS irq.h) +collect (PROJECT_LIB_HEADERS log.h) +collect (PROJECT_LIB_HEADERS mutex.h) +collect (PROJECT_LIB_HEADERS sleep.h) +collect (PROJECT_LIB_HEADERS sys.h) + +collect (PROJECT_LIB_SOURCES alloc.c) +collect (PROJECT_LIB_SOURCES condition.c) +collect (PROJECT_LIB_SOURCES device.c) +collect (PROJECT_LIB_SOURCES init.c) +collect (PROJECT_LIB_SOURCES irq.c) +collect (PROJECT_LIB_SOURCES log.c) +collect (PROJECT_LIB_SOURCES shmem.c) +collect (PROJECT_LIB_SOURCES time.c) +collect (PROJECT_LIB_SOURCES sys.c) + diff --git a/third-party/libmetal/metal/system/zephyr/alloc.c b/third-party/libmetal/metal/system/zephyr/alloc.c new file mode 100644 index 000000000..da70e0ca4 --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/alloc.c @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2017, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/alloc.c + * @brief Zephyr libmetal memory allocation handling. + */ + +#include +#include + +#if (K_HEAP_MEM_POOL_SIZE <= 0) + +void *metal_weak metal_zephyr_allocate_memory(unsigned int size) +{ + (void)size; + return NULL; +} + +void metal_weak metal_zephyr_free_memory(void *ptr) +{ + (void)ptr; +} + +#endif /* K_HEAP_MEM_POOL_SIZE */ diff --git a/third-party/libmetal/metal/system/zephyr/alloc.h b/third-party/libmetal/metal/system/zephyr/alloc.h new file mode 100644 index 000000000..0064a53a2 --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/alloc.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2017, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/alloc.h + * @brief zephyr libmetal memory allocattion definitions. + */ + +#ifndef __METAL_ALLOC__H__ +#error "Include metal/alloc.h instead of metal/zephyr/alloc.h" +#endif + +#ifndef __METAL_ZEPHYR_ALLOC__H__ +#define __METAL_ZEPHYR_ALLOC__H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#if (K_HEAP_MEM_POOL_SIZE > 0) +static inline void *__metal_allocate_memory(unsigned int size) +{ + return k_malloc(size); +} + +static inline void __metal_free_memory(void *ptr) +{ + k_free(ptr); +} +#else + +void *metal_zephyr_allocate_memory(unsigned int size); +void metal_zephyr_free_memory(void *ptr); + +static inline void *__metal_allocate_memory(unsigned int size) +{ + return metal_zephyr_allocate_memory(size); +} + +static inline void __metal_free_memory(void *ptr) +{ + metal_zephyr_free_memory(ptr); +} +#endif /* K_HEAP_MEM_POOL_SIZE */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_ZEPHYR_ALLOC__H__ */ diff --git a/third-party/libmetal/metal/system/zephyr/assert.h b/third-party/libmetal/metal/system/zephyr/assert.h new file mode 100644 index 000000000..2145778c7 --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/assert.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2018, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file assert.h + * @brief Zephyr assertion support. + */ + +#ifndef __METAL_ASSERT__H__ +#error "Include metal/assert.h instead of metal/zephyr/assert.h" +#endif + +#ifndef __METAL_ZEPHYR_ASSERT__H__ +#define __METAL_ZEPHYR_ASSERT__H__ + +#include + +/** + * @brief Assertion macro for Zephyr-based applications. + * @param cond Condition to evaluate. + */ +#define metal_sys_assert(cond) __ASSERT_NO_MSG(cond) + +#endif /* __METAL_ZEPHYR_ASSERT__H__ */ + diff --git a/third-party/libmetal/metal/system/zephyr/cache.h b/third-party/libmetal/metal/system/zephyr/cache.h new file mode 100644 index 000000000..36f6a1662 --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/cache.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2018, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/cache.h + * @brief Zephyr cache operation primitives for libmetal. + */ + +#ifndef __METAL_CACHE__H__ +#error "Include metal/cache.h instead of metal/zephyr/cache.h" +#endif + +#ifndef __METAL_ZEPHYR_CACHE__H__ +#define __METAL_ZEPHYR_CACHE__H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +static inline void __metal_cache_flush(void *addr, unsigned int len) +{ + sys_cache_data_flush_range(addr, len); +} + +static inline void __metal_cache_invalidate(void *addr, unsigned int len) +{ + sys_cache_data_invd_range(addr, len); +} + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_ZEPHYR_CACHE__H__ */ diff --git a/third-party/libmetal/metal/system/zephyr/condition.c b/third-party/libmetal/metal/system/zephyr/condition.c new file mode 100644 index 000000000..17831e1bd --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/condition.c @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2017, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/condition.c + * @brief Zephyr libmetal condition variable handling. + */ + +#include +#include + +extern void metal_generic_default_poll(void); + +int metal_condition_wait(struct metal_condition *cv, + metal_mutex_t *m) +{ + uintptr_t tmpmptr = 0, mptr = (uintptr_t)m; + int v; + unsigned int flags; + + /* Check if the mutex has been acquired */ + if (!cv || !m || !metal_mutex_is_acquired(m)) { + return -EINVAL; + } + + if (!atomic_compare_exchange_strong(&cv->mptr, &tmpmptr, mptr)) { + if (tmpmptr != mptr) { + return -EINVAL; + } + } + + v = atomic_load(&cv->v); + + /* Release the mutex first. */ + metal_mutex_release(m); + do { + flags = metal_irq_save_disable(); + if (atomic_load(&cv->v) != v) { + metal_irq_restore_enable(flags); + break; + } + metal_generic_default_poll(); + metal_irq_restore_enable(flags); + } while (1); + /* Acquire the mutex again. */ + metal_mutex_acquire(m); + return 0; +} diff --git a/third-party/libmetal/metal/system/zephyr/condition.h b/third-party/libmetal/metal/system/zephyr/condition.h new file mode 100644 index 000000000..f9dc7285f --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/condition.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2017, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/condition.h + * @brief Zephyr condition variable primitives for libmetal. + */ + +#ifndef __METAL_CONDITION__H__ +#error "Include metal/condition.h instead of metal/generic/condition.h" +#endif + +#ifndef __METAL_ZEPHYR_CONDITION__H__ +#define __METAL_ZEPHYR_CONDITION__H__ + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct metal_condition { + atomic_uintptr_t mptr; /**< mutex pointer. + * The condition variable is attached to + * this mutex when it is waiting. + * It is also used to check correctness + * in case there are multiple waiters. + */ + + atomic_int v; /**< condition variable value. */ +}; + +/** Static metal condition variable initialization. */ +#define METAL_CONDITION_INIT { ATOMIC_VAR_INIT(0), ATOMIC_VAR_INIT(0) } + +static inline void metal_condition_init(struct metal_condition *cv) +{ + atomic_init(&cv->mptr, 0); + atomic_init(&cv->v, 0); +} + +static inline int metal_condition_signal(struct metal_condition *cv) +{ + if (!cv) + return -EINVAL; + + /** wake up waiters if there are any. */ + atomic_fetch_add(&cv->v, 1); + return 0; +} + +static inline int metal_condition_broadcast(struct metal_condition *cv) +{ + return metal_condition_signal(cv); +} + + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_ZEPHYR_CONDITION__H__ */ diff --git a/third-party/libmetal/metal/system/zephyr/device.c b/third-party/libmetal/metal/system/zephyr/device.c new file mode 100644 index 000000000..85f073bed --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/device.c @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2017, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/device.c + * @brief Zephyr libmetal device definitions. + */ + +#include +#include +#include + +int metal_generic_dev_sys_open(struct metal_device *dev) +{ + metal_unused(dev); + + /* Since Zephyr runs bare-metal there is no mapping that needs to be + * done of IO regions + */ + return 0; +} + +struct metal_bus metal_generic_bus = { + .name = "generic", + .ops = { + .bus_close = NULL, + .dev_open = metal_generic_dev_open, + .dev_close = NULL, + .dev_irq_ack = NULL, + .dev_dma_map = NULL, + .dev_dma_unmap = NULL, + }, +}; diff --git a/third-party/libmetal/metal/system/zephyr/init.c b/third-party/libmetal/metal/system/zephyr/init.c new file mode 100644 index 000000000..8a860bb7d --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/init.c @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2017, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/init.c + * @brief Zephyr libmetal initialization. + */ + +#include +#include +#include + +struct metal_state _metal; + +int metal_sys_init(const struct metal_init_params *params) +{ + metal_bus_register(&metal_generic_bus); + return 0; +} + +void metal_sys_finish(void) +{ + metal_bus_unregister(&metal_generic_bus); +} diff --git a/third-party/libmetal/metal/system/zephyr/io.h b/third-party/libmetal/metal/system/zephyr/io.h new file mode 100644 index 000000000..5dd87d148 --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/io.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2017, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/io.h + * @brief Zephyr specific io definitions. + */ + +#ifndef __METAL_IO__H__ +#error "Include metal/io.h instead of metal/zephyr/io.h" +#endif + +#ifndef __METAL_ZEPHYR_IO__H__ +#define __METAL_ZEPHYR_IO__H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef METAL_INTERNAL + +/** + * @brief memory mapping for an I/O region + */ +static inline void metal_sys_io_mem_map(struct metal_io_region *io) +{ + metal_unused(io); +} + +/** + * @brief memory mapping + */ +static inline void *metal_machine_io_mem_map(void *va, metal_phys_addr_t pa, + size_t size, unsigned int flags) +{ + metal_unused(pa); + metal_unused(size); + metal_unused(flags); + + return va; +} + +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_ZEPHYR_IO__H__ */ diff --git a/third-party/libmetal/metal/system/zephyr/irq.c b/third-party/libmetal/metal/system/zephyr/irq.c new file mode 100644 index 000000000..9692734cc --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/irq.c @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2017, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/irq.c + * @brief Zephyr libmetal irq definitions. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +unsigned int metal_irq_save_disable(void) +{ + return irq_lock(); +} + +void metal_irq_restore_enable(unsigned int flags) +{ + irq_unlock(flags); +} + diff --git a/third-party/libmetal/metal/system/zephyr/irq.h b/third-party/libmetal/metal/system/zephyr/irq.h new file mode 100644 index 000000000..7f317943b --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/irq.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2017, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/irq.c + * @brief Zephyr libmetal irq definitions. + */ + +#ifndef __METAL_IRQ__H__ +#error "Include metal/irq.h instead of metal/zephyr/irq.h" +#endif + +#ifndef __METAL_ZEPHYR_IRQ__H__ +#define __METAL_ZEPHYR_IRQ__H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_ZEPHYR_IRQ__H__ */ diff --git a/third-party/libmetal/metal/system/zephyr/log.c b/third-party/libmetal/metal/system/zephyr/log.c new file mode 100644 index 000000000..fddcd8104 --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/log.c @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2018, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/log.c + * @brief Zephyr libmetal log handler. + */ + +#include +#include +#include + +static const char * const level_strs[] = { + "metal: emergency: ", + "metal: alert: ", + "metal: critical: ", + "metal: error: ", + "metal: warning: ", + "metal: notice: ", + "metal: info: ", + "metal: debug: ", +}; + +void metal_zephyr_log_handler(enum metal_log_level level, + const char *format, ...) +{ + va_list args; + + if (level <= METAL_LOG_EMERGENCY || level > METAL_LOG_DEBUG) + level = METAL_LOG_EMERGENCY; + printk("%s", level_strs[level]); + + va_start(args, format); + vprintk(format, args); + va_end(args); +} + diff --git a/third-party/libmetal/metal/system/zephyr/log.h b/third-party/libmetal/metal/system/zephyr/log.h new file mode 100644 index 000000000..b4cef17a6 --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/log.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2018, Xilinx Inc. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/log.h + * @brief Zephyr libmetal log handler definition. + */ + +#ifndef __METAL_METAL_LOG__H__ +#error "Include metal/log.h instead of metal/zephyr/log.h" +#endif + +#ifndef __METAL_ZEPHYR_LOG__H__ +#define __METAL_ZEPHYR_LOG__H__ + +#ifdef __cplusplus +extern "C" { +#endif + +void metal_zephyr_log_handler(enum metal_log_level level, + const char *format, ...); + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_ZEPHYR_LOG__H__ */ diff --git a/third-party/libmetal/metal/system/zephyr/mutex.h b/third-party/libmetal/metal/system/zephyr/mutex.h new file mode 100644 index 000000000..a7876bc42 --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/mutex.h @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2017, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/mutex.h + * @brief Zephyr mutex primitives for libmetal. + */ + +#ifndef __METAL_MUTEX__H__ +#error "Include metal/mutex.h instead of metal/zephyr/mutex.h" +#endif + +#ifndef __METAL_ZEPHYR_MUTEX__H__ +#define __METAL_ZEPHYR_MUTEX__H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct k_sem metal_mutex_t; + +/* + * METAL_MUTEX_INIT - used for initializing an mutex element in a static struct + * or global + */ +#define METAL_MUTEX_INIT(m) _K_SEM_INITIALIZER(m, 1, 1) +/* + * METAL_MUTEX_DEFINE - used for defining and initializing a global or + * static singleton mutex + */ +#define METAL_MUTEX_DEFINE(m) K_SEM_DEFINE(m, 1, 1) + +static inline void __metal_mutex_init(metal_mutex_t *m) +{ + k_sem_init(m, 1, 1); +} + +static inline void __metal_mutex_deinit(metal_mutex_t *m) +{ + (void)m; +} + +static inline int __metal_mutex_try_acquire(metal_mutex_t *m) +{ + int key = irq_lock(), ret = 1; + + if (m->count) { + m->count = 0; + ret = 0; + } + + irq_unlock(key); + + return ret; +} + +static inline int __metal_mutex_is_acquired(metal_mutex_t *m) +{ + int key = irq_lock(), ret; + + ret = m->count; + + irq_unlock(key); + + return ret; +} + +static inline void __metal_mutex_acquire(metal_mutex_t *m) +{ + k_sem_take(m, K_FOREVER); +} + +static inline void __metal_mutex_release(metal_mutex_t *m) +{ + k_sem_give(m); +} + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_ZEPHYR_MUTEX__H__ */ diff --git a/third-party/libmetal/metal/system/zephyr/shmem.c b/third-party/libmetal/metal/system/zephyr/shmem.c new file mode 100644 index 000000000..ecf26190e --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/shmem.c @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2017, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/shmem.c + * @brief Zephyr libmetal shared memory handling. + */ + +#include + +int metal_shmem_open(const char *name, size_t size, + struct metal_io_region **io) +{ + return metal_shmem_open_generic(name, size, io); +} diff --git a/third-party/libmetal/metal/system/zephyr/sleep.h b/third-party/libmetal/metal/system/zephyr/sleep.h new file mode 100644 index 000000000..55b3b96f7 --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/sleep.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2018, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/sleep.h + * @brief Zephyr sleep primitives for libmetal. + */ + +#ifndef __METAL_SLEEP__H__ +#error "Include metal/sleep.h instead of metal/zephyr/sleep.h" +#endif + +#ifndef __METAL_ZEPHYR_SLEEP__H__ +#define __METAL_ZEPHYR_SLEEP__H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +static inline int __metal_sleep_usec(unsigned int usec) +{ + k_sleep(K_USEC(usec)); + return 0; +} + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_ZEPHYR_SLEEP__H__ */ diff --git a/third-party/libmetal/metal/system/zephyr/sys.c b/third-party/libmetal/metal/system/zephyr/sys.c new file mode 100644 index 000000000..c2c96a25e --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/sys.c @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/sys.c + * @brief Zephyr system primitives for libmetal. + */ + +#include +#include + +#include + +/** + * @brief poll function until some event happens + */ +void metal_weak metal_generic_default_poll(void) +{ + k_cpu_idle(); +} diff --git a/third-party/libmetal/metal/system/zephyr/sys.h b/third-party/libmetal/metal/system/zephyr/sys.h new file mode 100644 index 000000000..712fdfefe --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/sys.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2017, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/sys.h + * @brief Zephyr system primitives for libmetal. + */ + +#ifndef __METAL_SYS__H__ +#error "Include metal/sys.h instead of metal/zephyr/sys.h" +#endif + +#ifndef __METAL_ZEPHYR_SYS__H__ +#define __METAL_ZEPHYR_SYS__H__ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define metal_yield() metal_cpu_yield() + +#define METAL_INIT_DEFAULTS \ +{ \ + .log_handler = metal_zephyr_log_handler, \ + .log_level = METAL_LOG_INFO, \ +} + +#ifndef METAL_MAX_DEVICE_REGIONS +#define METAL_MAX_DEVICE_REGIONS 1 +#endif + +/** Structure of zephyr libmetal runtime state. */ +struct metal_state { + + /** Common (system independent) data. */ + struct metal_common_state common; +}; + +static inline void metal_wait_usec(uint32_t usec_to_wait) +{ + k_busy_wait(usec_to_wait); +} + +#ifdef __cplusplus +} +#endif + +#endif /* __METAL_ZEPHYR_SYS__H__ */ diff --git a/third-party/libmetal/metal/system/zephyr/time.c b/third-party/libmetal/metal/system/zephyr/time.c new file mode 100644 index 000000000..16ef98057 --- /dev/null +++ b/third-party/libmetal/metal/system/zephyr/time.c @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2017, Linaro Limited. and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +/* + * @file zephyr/time.c + * @brief Zephyr libmetal time handling. + */ + +#include +#include + +unsigned long long metal_get_timestamp(void) +{ + return (unsigned long long)k_uptime_ticks(); +} + diff --git a/third-party/openamp/doc/CMakeLists.txt b/third-party/openamp/doc/CMakeLists.txt new file mode 100644 index 000000000..6a28de6eb --- /dev/null +++ b/third-party/openamp/doc/CMakeLists.txt @@ -0,0 +1,29 @@ +if (DOXYGEN_FOUND) + + if (EXISTS ${CMAKE_SOURCE_DIR}/../_doxygen/openamp/Doxyfile-openamp.in) + set (OAMP_DOX_DIR ${CMAKE_SOURCE_DIR}/../_doxygen/openamp) + configure_file (Doxyfile.in Doxyfile1 @ONLY) + configure_file (${OAMP_DOX_DIR}/Doxyfile-openamp.in Doxyfile2 @ONLY) + + add_custom_target (doc ALL + COMMAND cat Doxyfile1 Doxyfile2 >Doxyfile + COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) + else () + configure_file (Doxyfile.in Doxyfile @ONLY) + + add_custom_target (doc ALL + ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) + endif () + +install (DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html + DESTINATION share/doc/${PROJECT_NAME}) +install (FILES ${PROJECT_SOURCE_DIR}/README.md + DESTINATION share/doc/${PROJECT_NAME}) +install (FILES ${PROJECT_SOURCE_DIR}/LICENSE.md + DESTINATION share/doc/${PROJECT_NAME}) + +endif (DOXYGEN_FOUND) diff --git a/third-party/openamp/doc/Doxyfile.in b/third-party/openamp/doc/Doxyfile.in new file mode 100644 index 000000000..70d395322 --- /dev/null +++ b/third-party/openamp/doc/Doxyfile.in @@ -0,0 +1,2385 @@ +# Doxyfile 1.8.9.1 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = OpenAMP Library + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = @PROJECT_SOURCE_DIR@/ + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems does not +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 8 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. +# Note: If this tag is empty the current directory is searched. + +INPUT = @PROJECT_SOURCE_DIR@/README.md +INPUT += @PROJECT_SOURCE_DIR@/LICENSE.md +INPUT += @PROJECT_SOURCE_DIR@/lib + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank the +# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, +# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, +# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, +# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, +# *.qsf, *.as and *.js. + +FILE_PATTERNS = *.c *.h + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = README.md + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# compiled with the --with-libclang option. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = NO + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANSPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /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 um9>gcFx;!F2e3$L=irZUqE7j-8&2)7u`V?wv zWCav_X!mFi)vuEhlHAx{xkz@<%0}o+b8q)zfVPEB3+7WgtBfAHjjpx-IkbvZbqzlF z>eXrd5)vCIfk12#THz*fH*-+a4Ky4R<#f6|KbnebfHo);$KHlpsQL+QN5%&{$ZPgV zn2tRJYK3G6`msx`!^DuysGR71r}ghuLi4HsW9-N~KK-NXcTc?2*;%sQ!zOC|$xld14jWyc!ki-&x@G5FAt zC+}W#$~;h#+>OS1yQ-hx5e%C|$DPGK_c=6fhvGB9?a6|}l!4;6QFJL%Cx&cKL=8H+ z!H;rr^_IimkrTQfm;ed!B={+;PdkK{@p{w~9c@X31T#q7#EG;Nx_2zGEJka8X!YGa zAvuypx4fFIqOM+m57>{evimr=G^6V=kVI#jQp@G(@!FL1aGsEiDV_}eZzBd$>m|7GU9nA^6Pt!*Oukqg(iIM`m&rF2J_~sKDx{Wwd};I-f1pHMH%+)7e)czbq}! z^Bphz6fP1;zujBZDV|?Ix01#`l$d+ht5<7mMhch$X1Lau!`IXQ%^=_b!ga2)Aq#Zw zYwWpAvkqsH#im_0+#o>Jh&G<;NX!`U419TVL>}=V6Kw}pnnIJ)-oXB=?*LGXPP=4t24t$s(tlh>d=_PV zcpd@s8Y;3}hA*HwDqXge5q{UKuwSKO7q_4EKJ(VwYeqZa(M^`&h&8<4Wsw)-buSih z($-t%=*mese4G;Rwn^^<<3km@}W4@FL0lF+v=<^+LrBc5mO2mxZ{yg zms^3f4E9D9A%f_mY) z8|6_#IrBZomz;k4ahe|GhpBGqn|d&maN^iwfrQd1mxX?VA(_lu zy{D&^308fLySPC_ptpPH9{#SptqbbgE(zwmlDH6XJ5ltQ9&{{UpS$=bKIQ*t$0c`e zFvjoQ&!EW{v5po~ckO28$;s6}vz~C|;#Xo7dlGY6HsQEJPRMqnq8<8ry_MnNx$mx~ zbtXDlWzTq8C@9|)Y)^9d!Dv0a{ZmE?Z-ViWsWT4`_B2mTdY{s(I4ymvG9<$&l{xyQ zQL%TrgM-b}%h#P;_UL(frf;&e-qklXnl>RRe2i7wvHL=f+Q81=Dw3835D+P(mqshV zU$q8N8;f_%XriB*`zpj|v!^9uj1TR_te(K5?x_@7#syrVLaeG0hcx!3q@@mn%o{csc6!>*NcdfM;|2kq*Qx?W)m*bq+Qxyh-KnJ&M z4qIG~Dqn#SyX5>g=1Wc_M9tW2-1)xp*GSJ-x#jD{)B+~jHjNtC?$z73FJ19-BPSf@ z!d{4mE^t$iX!rCuvFG>Wf16brBQ?SNz4?e;Tw&(ncx?XMzH;#3iI@nvl^})%sr;vy ze)TK-^?o7O&eAN~5FuK@L%mdr^h{=RbM}m$6VncTj&JEKKECr%jQuFSypj>*PC<9W z%VozJ+|->|eEkLVT3^&P?yxh(*2v?2<6Hs$@@T&ai!o`KXSLFr+kZow_cVv>cQQG-L>;3 zMzmxb-!6k9&AI>3Umw@%p1%{;o_fo_$w{=a%jQH%oTspBsoQ5+ld0AshqEy+liBjx zerA6MWHBV0Y4Zp)z{4T4Shf7(oKC^-6$%cC-=7=_nJiKLD{raC!8bd!v~sakr%qhC za_NSMkkR@Zy^&5s%XTsUN#%nDmBJ+e56X#zq|xZlk)nWtZO-p1N@h zimM89B1i97P|c8pQSrSx;JZSjmz$>@*F!nSi-+!neF(V7##_jo?BvETh;e##(x=o z@W54PKVyu>mclR3LhOX}zGQy?t8ln8zb4}D((1%{YgXMaIDB~jUW-f1H_lg5y|SER zxrBY8tvlR?to{A|#a5rVoEq;9vVDcv{!Boeqm**l&pkD<{x!{I-)i{W3c~1ZW(oVy zJ-83w$4J#VXs-hH8h!4- zH+vMXE)8re-5D)*A%+&|l8tGigQXgq*z>$PsDoq12^M8PM+`mFwXbIh>kNlx(5~JV z_bU;4G`hg4&8+OiqlGcY9@o*o#GzYY9>`;r4B=JTzmVxlOiYX5`-ZIQ2(-|0ZY`@- z8qysCvpv`gI=4m2MW=|ff2FH!==reqA+6y4zK~Jm>=yJ?2YEFcshOGrsH_ln9lnHU zsTV6VBOg928N9CJ(^mG+p|AHjL0>LrYB+Wp^u$4ksc?2@{c&brf=u%2G6#B`L4kKh zZ&l=%niQc_Nd-TOWy5^g>C=si=C@l~MSEFRw^~fOet#A#kn!&8%X@MT_f*p-&UV*~ zdw%ArXYYF!>wV#?H>QzIRwseRxp?-y09`ZgNyb$u?+zZ`7?)sgT7Tmc+sv!8=~9i? zIT;r*wbPy)*(vqiq9#U)+p_*=s;Zk*P&m0~6$T5UI`HJ=S5Da1JXBvHb`gK7y z+wdMH?J);^>kp0k31_u$+(>V>ik8j2D_Vmni40aLiuBMb>)x!~l*Th{?HRq2jT`px z9CQj`snFe49=)jMZIYL{=Z6kU+^o^*iSeld^A^Q!D|M$(`#pNzWm$K23=bz;xa!9= zUHvVH&WwT1>8W0pB*kMsNOzA+w%_H{>anFcInyaQhDy2-jO_-mmmNzoPCt+Nx(*kM zZ!o79^6p&mYv{O)ajUY2bc$A)LPy)8+5uHQ51zQO{$?r1c3Q1vl5E-J({@g;p%>Z8 zcLZEA98LAZSjSsbbu-dWW#1mRZKJzKC)JN>#AX=LN59<-|9_Z!%cv^1w*7liA_yWN zT^0t?h;*nZNTYNs(jeV!(kM!opma(%sDv~Ei!P}p-Ch6la=Z7v@8@~P|HC`RJI1>{ zY`{&db**{LdCqel$M3)tCom}%Wr#kYU8x*ftTz=BlfA6dPsL;v$3%){KYxN%1G_ag zJ>Vq|H)}%8eh#}4J z#wN#f9=PdcVwsv0&W8?*Aun(j6S7#h=Q*S7A90|d=Rq%)6X4OdS^-wEo;0jL26HbP zGtauH2=3VWi0~9c0E%fGXceTiXG1Z-V>}$tJ>VP#Za%&1s`iy>q3%>vGJox1T>PMD zj`!R%MTvupXSEiG#908D$bLW8crTN$^c%cX8}lVC?*<56?QmIiygS*>IL?U8XI&AH zEPoAX40lN!X?oYY>vh=1&7%C>jX^DU?)HzVso?}eqnRrA{0_RqBdERNoUn;$e?5Iw zTp_$Qmn?MXutapQ6|=NZ?p}77zb51<>3}g7`PYTObJ5#5ayuu&;Jovwu~8Uy8T#H! zUxn;aj5lG)!Ntc>QYs(%*_pV+q3*eMU*~LWq=^^%lw_>SwQsua=DjG6s`qX`morq# z&p7?Kusz4gt*czQy89Gagm+p0ob6urx_DdSgmShf1?mhftv`aVYx!~JZ7$NCLsY6( zuW#AQ2zl(?fDY;8ZyBPm?^@80k+E{8K1n`>n3NEA4q5Q#-gIE6_hyTdP( z#V8TTvOAMrG9PaMKlS^?aA5_fO7kuWC!ts#{7BJ}P_LB_qD#&jCi~MdR5wQ|(<{OZ z4K*CO&t8j+qg^j(Kj=Tt$uUi{xP5R#-7>vys^%yoB&r6(=y9o1=-|-DX43x49wx!uCH@RnysLD}_YnT|ifn<&me!uQ z8#RYFw{5CiXXW36X3p-5W1pfMeNaT^O(m|2H^DFQiW$RR^ zqW+v&a#5%wQ2!FIsq^K@K@38@^V?W|EvhLKF)+m%g7Rwg=K!Tj=5T-0LzVKxzi5UvCLj%M71MPBs;2i@9Ug_bOJ%Siq>~s?<=iYoL(j&Ay08lO~z_KDhYiM|K@x zyLl!XjXT>zK*qFOdH`np*rs>qC4=Ea@%3MA&o_ZY`o z#3MNAtzD7Qn36oZnwYpXWOB(z$|IE zS26}&ygPG!uj%>q4+qj8y2{u4ziE|~Ir71wRf7fg+w1HOsL6||WTui@42PH2AI#vpa@H8*&gn>UIz~b%CNH( z$z1Pbe*Cr9R}yX6nO8v94T(|k{62Z+qG&lwN!h@VXI;@^@pXpt+kf&Q#0FRILtD%=61IEOHYh*I4)rK7f9+wT>EI~Fn{7;yG9ez z_G%lM%%g&v6L|1X5~Dq#)*P|ScCkArOwaG8>eNx7mhjdw^;5sq>jJ^a3Gd^5F$2S) z;>KV7gLINZM@`LLBa`h3eI2@P#8T2-l9e&*De~yg4(R1#cHP3(mUmYiUY8#qc680$ zf4A`&4f{F}xSWELQcv=p*}%KYSj2R5ef|`@H5M9+F|V0Uz%EzkH0*X&bK6Jm)$Uea zQ~J8x8K?yw=ruNAlZc)a z-b-7`6SBM9nM#u9CDxf0H65Ga)w@e*asc|Qg`w2t7+#!F54GF^e5M{9(zuZrOX%*d z644nQueZhc{QS1L+4N4lJB4<6G6ZLF5DSK=!|wNsOO2)>$gXY7>*!<1*wLXATVt=+ z@u`K8Oo&wKb(v~%9?+~%#hm|O!0jo#(#97Ya%IebjI=3=lz|}#sB*P}5wKDF9ywZt zb&d%7o1>@e%~{11R`FS2Non?~+QiS%+QYEH7kXdE$j^|zCH?K{nHl>`4of)=6+?Ew zt=(n$h+b>s|My<2zm_lf@Bh`xg`(oX{_&%>HL88x{Ut}EXQpomN3ceRB_My8;l3Oi?+d`jf}H=}@BZ^K?N@V2edzuc zmY?6ApomV*(*f*Dm-@v35URgrF}^jldDxX)ORk_UD&`?rbD@QepZe;XYxU;~(r?R7}L~EV!bW@qQIH=J=->d+ZXtbeTFVJ7B7TL&fkaPmz_98mx==P)uG# zpsHlmB`P$*S{Nl3KH}%Jq~&zx%yVR0+3YKq8SBkZhw)CfeD&0P5Hi) zXqBfJlHW9xn}njSAXB} zgEWOcnq_{(I&M=>w_n3r_Ne|5w_GX@i%Tvd{y;rt_!q0!<8*cRAg0-**v)ju`uq2{ zZ#L||&*$FRTJXWeyH)(u!Bbc2q%9iXr24I(OavTj&+gOlokM5big#_cm30;TabHysG0=7Ro4ffYI&LG%4sOm(P5W` z;%V6Rr^pw%S3i30d9>CNUiszu`PZj4MxEw99nwM3Ax6pGW80fsl2f54CS}I*r17+r zxHls?4FQ~pahsgE#PwsnTD$ZN)cR$%cgG~}&2f>Eh8xiGcI}$P<5#)eVb^8dDKoT^ zZL>Qn>N|HuUc7owdJLjp*2`v0HR1z5794RuNc|`VMrl>?U%JgX5w4-tz8U zVSl+~Y=)zzNAmX2yYLgkHu%=tBZJ%COQG9S@5Ecedk^h4GkT-?suxCeoML6=(7RiW zOy%=>^S$Ag5b=qZqm4z$in;3S=|gCRunI}M%g`8$xPvD zsHX`?H&^RuiN8SrRnw%|jQa5Lve$gho5@BTJB(npZjLS?b&t-x?>y7^lUe8^X&@nyc zFxK<{C)74$&7z-CoA+x*>`^a0s*7>_iKj}tx;EZ+q4I2*&oDj}XnfKWM@N2t=fmLUHGBG?jfjFBoi-&myIPejKr-2U`LZ=> z-7wnUFZyic2{wybucQH8&@~Rj<^D&<{SYTLA0nn1VdYk(oRbwGd3$<`W#Ogp6q2T@}|i4+h$(~jPldRL3j^y{?!<{TEta&(1X{*2JG z-!45tY~R-axCV}Sv12UNY;0XG9jE6vDqK~lPF}tOygr_8m#F9X<_R3SMD9ldotY7s zRT?0q2XBA4RSRbilMSYBDGDX@-I-J?`^(VHt+lGbg7zsiTG;#gFyX0_zwUcYPc^}= zZ+@U4e3DQ`HwQ)eJPwIR)*cuX)PfYZ#@fw}DkTk*EUKz)x zbh_R{cjxiGJC~7D9p)h5?QO*~hZ_BsD=#?e)Zh3&*azU0FN_{Ivg{s8{MWpzbb7a1 zox7%V@Y;_oH>VHs4ElpNbUJ$~1;E+3$3IJ@S15dYK#kgT+Z$_-e~evc!$URP(_x!{ zF@oJxugLUc$N}&Ep_50Ctu!Inm^TIRN#-s{8G~yJ?_EncmXcDf*zv5c_EK|ekEGS{ z2KmZNOf8ij3ebgBCJRM<-mi##jt@z8rpOmDP4D6&Vqm%YrOob}FU%mRuy_56!c1DG zI-)U~VURd==l2B>k{T?={Ix63X-Rv42Me3?vWWiA+v8=JHA-?)3K9_YL_)eS0JNXO z>8qPi?Bh(3^-w3Q1(jn!geT6Ly`$TU52GTX*Cz}@O#beoRqXe#4ub=QW;Z+)R?Xw(MNG0*M> zRUFhXk$m!yhoxg;$l*9-D`Edu#g;qo@k_%;Ka0$3=g?4E{+bLnZtY~C6FX9;Y6+sj z5#G;Q7scB6F?#?0-p*nubG8^yW7zvAam%K9_wHeX|IT74WqrJn$>*YE78Pan?q%!4 z^6DkD4AV88isJQ~Q;oyI@(9J(Ul@&FmbSv7%m%VxoYF*rGo8N?W`Dq({a zo8jI2v*Y{AK6aQ5&b_#IAqe(!^!8iE;|M(d88%4%u(zC}{O8auhJjco$nb z7N#5nSAySAgI>(aZ} z%GB$RK@=Bx(~=gPv?}MOg(d^mN2v@PU)R)#fr~N-@VFPcYr}^@k7k7TBVnodiwAn{Ly_Z3c3ra{x5r{+HMc(9 z?`>qhGXGUjoa#zjLT<%XV92?A{#^SEZ;xMVNO=7#m)dk&bTS47n;dcX%6Kc?PF_Po zYY+*olabk$4C(F?5JW?dV$r-`u|_p3ZI_CDD)_K9YIyo!UT^Q@(zw1(EU!@@`-xM; zcum_Diiyc6Y&@5c4@r=)b=L>1J){IsDUftzQnFuKRheAlT# zR=R71wZa~Y(OH}dnrH-BI+=|rpHL)XM6L0}!s~&es=ylSTm0TKoX^mm#i~Cl-14=w zPq(`ilDMYi;s}Q;O~oh`nz^Hd=_Da!q3KG)q|*(_D{@^gBe!O}GX5?fg4N5DOmOlZ8 zmHrY1Dt$5vyec;wacaodu43@-Q}>Kt8zoT&8__M0ps5+0!vMtYIpW}sii!f;ymexa z#+mgC*RP)fgUf9Yovr{-45L*Rzw#GeSXA2{?*6+6@ZhYcg7}}sRef@^(VBd^K31Uo zj33oz5j;Vroh{E58YN)K*?v+@6H!hozSF3R^LfC63s5Q2zFlpgHb zubQ4T%in9fE+|L~_6>>GU>3drQV|YLK(+wi4Zkl}uMwzYN-%5+A#X}ZbZ8x=4?1Fg z=aqBp+NIv0a2;KV<>JU&bc%VGB+t*C>lv5w;7I;FLzT-hXO zX@B)*(>;6k%o>FIk6<=K3D=|qZl#g}G7DtnCxAl5W!7`mexaWfe6HU&nFfLf$J2oT z^Tdmoknr}CCzpVd?gNmnBtY}SEEDPudxz=H0W{(cT2~^93VP3gW~oQWZ0slz=3W7*|&%RYj>kt zAsKF3&{79dpGRV7+(9z^0FaYd=KyLL0X|>?V&bqb&+);l67K7Z_ze*^L?$(`Tv_3b zYxW$25SDb+>}Yu50lwdn3@dLKv!eTv{r&2*usiYfZH?hmK=I1~d{;bv=pA_RAx0N; z_dsCNgESXcRlCh#5nsC={_jO#d`VJliLqKF=i$n6lV!W}@ zK4LyrQD46;@d@5bY;iDnNL*UBD~BO-72G{>zn#YyE?ts9fsy^AA>4TRfKI#ysLY++ z-6rtl7EC&AM{^G*l-WwN*8CRvG-rLf99ilMV%@ebpdQ6`2ZNlItK$U%~$GeLbj&5=ww%S zcQS}C*8sjj8**P>J{(|nQsB9`#LQfuzNfS3rK=kc2qg5+0!f+5_Kl|A^%2enXo6n2 z(3Psd1h|c$hX&^_fQQ1R)W`0raxtiiBe*|FjMHCJWR!gw888Wt)d5+ z_Z{bOHl|*USKUkIRc35ZH(VZ z$dXn=jrXI%(4R0Sh=D2wn*h zu$EYjy~@qy02>bnpcm;ObNUPT(0RApG~HhvQ3mFM8A(b`t{zl*7V*aBF{+aEZE9dx z^3$OLr8E&ernZ!&I!_dU_;_z1D)&$P#7mK`N+jr}M{1=rK*Nj7l9&4>=T zR_j%})4*lD3zA)UqfYyt1Ow*J#l^)QXFEEOc_!t*9I{3l=x})r>l6%^H zC()I3bl+~m4yzee+tP9h73jx+Lf!%d*#mAY?#n(m z%zD1hxp)tj!-z;h%uH=t9v&XZybq9`(-6va4_4T>Z{CbQNP42Q_i$zS831my(~jUm zT|9sOOO`v_-_)G?D5PFS{GgXFH$)Eiz$}FT!eFXwJjGGz4Fr7@D&BSOTEw1Fu54=e zc}~tVVDBq(i_fHQ1N=?}>V2yNfE}KM-*}?<-u%OjO@+*S>Vok3-cgb1z-JhQ*@Fm4 zfl-s)kjQ+KZ8E(c_F5?EU6Uy#C<5s0wm?{3bS*NIWQ}!0(Tc3 z>V_Pshvm^~^oJZf3qQzmh4!9Eu}o(?_%q)jADBa$eqS)d!1DrWum?VQ>J$#jVyt>( zW)*~g$gKmKZ39(L&}-M#)lrM7r9Z%f=k^uG8F119sC1pb?2KGVaDRsU`K5UvY_QpS z`I`X+$OICP5$6FMb*`}nF| zmh^dS)U)T$<3@A(LW|5l6mE3T7;+g&E{r_PDYyQKjrsttL-xKzLt%&%Ou|FygD~KG zM+aYc0%++V=_=19KGTCA=xzY@c?Rxrx)y-sg#a{z7Cc1XzklbHNvd#JPg(8weWCIO zlcwou8rlbpJ#98>#*sy1=@&#-5~9>~-Xh0ne?R=A)O~}3C{*0HYaTohX2Jo$l;M%I z^s~B#+eYn$dJR;1hKCM($3*^tFAyM7RqMw7dq)UUK8p%{`}UD4BP}fp>JlGcpL#Ly zu1z7YWNK;(Njs_^8q$L8&1I0Szh79e*oB!e89WEr;;ST*4%PoV%1#C}%B)3f?> z7PzjkYx_COF$hf>;*hVxG-$_i0!M3ICA6;|@Sv(DPYHwluES8CgShGSDa1-|do}yFFNzPeS;kir@NL4t3uh2if z)@D9jy3}<;3Eol+x%AFN%V4I1`S%#BQ94U1i{%}g?={ES@dSy9#VtD%GIa&pewn$U zJ2c9)4KJHQ+Yc4qw6@AdL9M^)lmvH}4rFdUIT(F2%!L>o9T%ekzt-ZmTxA^Yy#;eH z@_Lg2-h&{nfVvS6c&8SKC7J>R&%4S>VW2?22e-q0AZkIxg$&}JEOXt=Ku5x0WQNU- zQ~L7VMP&YksENG_7|i}MngaBJDuCu?Pui zbwgnSJ2z>VUOxdU@&RPK((szS|CEwqw)DK0i;5H(K5(-mQQ-)0e{G?lqZ!8FT?yuX z2)=^7O)dvGhTp?>Jd!y;GbR9X`@FcpBs|#hD-&-ItA#jmHyRe>aQ z{9j#L3x)pyw>NA`@w^{)P?KIp#AactbET#0v`Yizs0*Z2RG4_emUG?95AP;SftU#pO zGh^uwaEHlGOyVeK6M~4>jf|PtvNvlszI+MK&#(4+uCt)OTgxlrco|fIMMWucnFuKe znGCYCZu}IPpoyJ zv*M5xS+FH@hbU)f>YYL!VE15e{D+JUNAk@ zU=dD^wvu0P&Nz!@^0)c`IR5w6U7nTtPR@TEY!jH4HOZ^J2ksLr&^YiYK_oVbOGU1SA5d4N< zyrl|-pn4gObbdzHlRIlNmW|Y(lHu?vJ-hW|lDB+ZkDIi=G~hV!sYNu=cC%!i)grKm z%d6^PH8{bI0b2${#$yT}*#LY7N zRZ?-{ow0Z3IUI%)?}%IHl^}Sl=fj)y_=F(=z0{UE-^eec6vQmO+|!(a=JOb~48Q3)`e0A@4GGz{R?bZ zIaF1MWf4J(BBW7>bvr<+s>@3GS^Hwgm}8`3R0mE!dRfGSxD-hJ*kc<$rM|sRr2zeN?@Bam=X1VtG{LP!H%Af6WAALJ_@t(M?-FaY= zoMw83d*Zg|Uel3FVq)GP_ygq> z4-%j43A^)8H8Pz~@H(BYd_U}P=i{Wo*3!#Qfc+Zv=H2~urF+8j$apJvi*q-vT-zz-Q}qTjqig+b9VE+DF(|mdYgK{@ z((lTO+RN&@BOmtwgNrL(Z26pCC`FXd;$)N%RcJJ!fW1^$k(CwW>yNt*j!PD3r_GGR z&poybaYDwTGXeq`Vjg>GHfMaYbhCqZ_sskDjTa3Eig~st@*cfen??)!isu)o5am{z z30~%-B4d0?`_O!Gz^q$|eyhQB^4|XXgvr5zPE7G*J0p4Lg!iNSb-e=V>4P(^KRV8_ zb-1#1tiFH$b#kKB!EljwsT;p5CCIMh%(v^@WC$T+n;X^+WX@Wm`d6=K<(~>o`eo_u zV}~WP{7>fvrrQ~$YCKcKgamWbnnInH#Gxx`KX1embK^cUj-NOj;-eiF)PLeK-Kp5$ z&J@#fvmD9DX3)z0a89Ko>8@E|Fe5MXjQV_qVbuBdR@sLGUteZqsc~2~%EqQ0L5bj^ zW!{^%W;5A?!Dm!Vuo|`&rrO#wTr^A@S`iS_W2WETi*BZ5g(jp`dHn6$=R`$kFzO9Z zZTxh7{!AG=Dp9uOK#<2tbFP3lTr=llizmDK2hjxnM{v>9n4gVQ&bl6FRb>Tz?sfa| z=6%T%zw|6EzOb~g_#9EI0c?%xVNbW>LHo0>KicH;a%eVm{3tS|iOID4y8p?364LA>pPw@z0bxA~P`zeWbqQ+;nY$4{98n#(H{A=%+Ec9GqtF2dnot zOp6wsZa*7zr9?R{K3EQ-)d-+8+|U81Kd?zfaN5EQEPpLfKSb&+n?g?rGOP^SE#;uAZ#`Fjc3+kV zj+xGoKH6LAV&3$ee6_f4HLU2TqoMJ#rhC4q$UsH{7a9}dsq(eUH8?+i)}|(y&4tT3 z%%yGbZ5A;YNPQJ>>ph6nEb4I!V`*Cr#ADPiD_dv7-SlPe5`8ldUMsT z*FvaFHBZ)-118uNIs(}nmmgQi-|3QjeR?pMD@)i&-~`B~avE!GDMZ{3ZB=SK#hfWA$N2!=q05lrY|&Gv|Ka6r=U+MfO5{Gm$f?*#bRpK7@XAj@nx0D*;8|)I@t?+ z4jIy%=DkGJf@k@i&p?jY_}H%Uz=Uw~f^ljJ46J0IbNH9YomxMJC)_G7 z-4|H$?cM*!NV;J69(Q(eG3W}ci_o8APyG85oJ6?`Gl)ADyLL2lXY)I)r?@&5-Zi;( zQ4%|VD$`Q4C5$I5gf5lL^0K^g=3tQ(NnImO1V`pFIk^ueK~3vZdt{<2mfPI5@#Pvc z;nSF#rsj>|yX!t&20h`aq@*l1Sx+9hXml9_qnE^fvzKG>YD5&tx5_r)Hw(xGfaS zO=NP_w7v`S)ZoEb3*WN{O7^Lm|IW!iJ3Hs`6?c5SLuG_P5PT%KmzdMJG>c_Nt^`j+ z!JHW<7f)1qkiRIZRZOg&;HBm6-owjhNVtMY$jI_=J9k65O+m_ca*L<~_Z#&fOTm;$ zEMdH!HORzMKbm*j25MK$I44A2pWUwu}%Hm3?N?bpRzVs?y_$%`%AF7`2m5n+jfR1Fe^Y# z{Pu0_Z1-Gse+^UVvFABK&9>Z-kjbNLEqwR&pz`X5;G$7Ib4xz+l+Xw^%vgMi9Gcf~ zr$RJNzO6ohBcpVo2!p|IjY(Y!D7*o}W`{#|b$wk*TC?(_Q^BU&OTCTP#KyKNO=xPo zQA2%35-l9I}+sm}>F z@Rg5OZc;_Iu2R0=ADDUsU%8ZqY4E{mk4tro_LtDs*0y<}ayim7fyMBhH1db>zV*g$ zuPtlA=gB%i8HRK{AE8%^pN_=fj0BkZcrnDsp^<;49O>qJ914=+67>M=u{5r-ULSp;oWtnhW4UIVw zo&pod>sV~1DPpi$pNS8C;hS|WsAHAKxW{qU{psJ*wXzv#7T<;QI*llBzyV%(;-5Ki z$x=3)H5tZ@AGuEe6&myQqR);qCgeP}a{fbc@6?ayF32SB3XCSRGYp<;zI)H@OqxBz<A@EN#XtPP(aCMeDr41;6q_QddC7@3U|C zB}o+#aQFqEjL*-XLVa&*s|OCu#Lu)p7ivl8p9aeBzsPbTw{nfp*47q`k#}NlmGhOgIrq@DLII`K#qu%qr-aaE(p+oF@3z}+IXCk zMFiq#Vyp^tv!~@si>g&<{a)7bie*`hvrBrJc_%9J27yU$ ztNp<%V&FK7KTeW1ixD6PAWhnXdi&Oc-P(l#@7!EhtDckn)eMn5k{)9v93Yc{E=k5> z;SKamw?d|!gz|o>JQfu@3Uv3z?fg`!l85#lI+lxtd#WRCAO+lZ9P|%$Swc)my+&6k#BQiGL)S(QScC z;kCF#aw|aiUP5zJ;q@&EN7;Dcf$sBX-V#HO0QCOdf6j9Le&f?3XC)*EDFMue+{T<7 z4htP(Di_qJn}J4NJ5kSqm8o(aGOD*+Kno-norZh)`6(*z3Egvvmj?6f=P4CS*uhbd z+SoUuJ?nKpD5_$x%$^`kjihv0G_3O^YIm1~)UuU2Y^ubiz=dqQJ|JW9UXb#G3#cbX z*w0U3frwD67^PDl89Y|QWHO}6+``PPQPa!hMnugktuucDF*J1GXlTG{ld-U7=-@Hz zRU>_q^(ri=Cp}lNI!iyV+nD{dh-&s{FaKEANhe0|BkxjfY58?Bhw z2cx!7tG>|dhaBl#cE&;u^BLREGD%!r(w~%9xv3?3bZYeEE7o@2K3&cV;uU+u^kvdQQIqOYbGk>p%m!n~N~=^M<5 zT++Pu@VeG^m0=bt&myY)CKN9IIeH!r+sx9gbH@Ko!XYL7G13Z^KaUY=zAsZE8C2=D z;z+gi^L0_5&1#bL<8sF~9VM5Ppsv=iqlli!u&H5O{7mz$4O2_42DO~5(e5rnFNhCz z4e`5HNj9FL!XnTi^DR!*8c#yT>zEku8a)})uCY1!Dyf;Pi~>ny8I8dzjWorBj<2eA zPZ25K4;2-yUHO?ZKMS?w)+qU9{xMyf4WF~d%loIO7WCWY*>jVep{=fQSDvy=# zz1myqWz%n`*N1@Rtbs%v>y5O-n+s@TXbODLsGGc;l1C2l3@ z+PU};>~plq(Pz-wfe+j&(u+ORRLt^f0uNKeog>)s?uDrKx$A!@exhQ&&^GpsB-3qX z&moL6Dj_%L3t(7mr?t&<&q;cmQ5p(|cxlxI+51Wz<#T8s(Dk2&HeKelz@ypMOg)4j z!dS4x4nGxtTI!Y@af2|4gUtxRrOxwV>U%#VdlSlXY*V~~m-LW3O})hO;h3>;OfZAs zS@mk|?9PmCtO8>k7nix64ly-@LL<4KJDaZh9gMuMw?|To-GOKgEZ2I&<+9i?yeutz zD5W*!1VnY2Pw-i!sS3+UpTovmqoXzrlldVaFr=h>_w3|Pf0CwvG?Xn2^CjGu zITS72#*OIwxD9)i#){?W=FoR48Xxbyd4G0)a{QNTh7KKICx6<}-h5Hlc&FIHhlu_p zz+VuMUoYGIru%V~VD26KhXZ|jcU-rNJ>5-AetzaDw48UCmi{qmzhPS}Z#+Taqg|CT zcf&oNUx~qOCvShIW2L#tr_d~U&es=0NfrhpOS@hlxPO0n>Wr7y=16PQn*!tW=6x9* zka##*D0(HU>J{%bZtVWV#es!#x_)jY@0BPlA&+uOSc4ViK`#M%Ix&72hZ^$7NaBQ_-ZjH;F znd&^R(pz1X9-kEW`eOn`@*)KdfnQ+YSr9>;_O5Gaa1|tiX_e*M&ORXI5Y7H4dpf~DiR{#04xFcO}Y;)_ugPxYonW-l6mxQ&sHQ3kH zzy@ogIc>fDbbL;w2s@@=bAbDaufNv-_rn2yiWIh}2oANOw;?nJnx>y^49;Duv#$(S zXDFJ?IU=Gv0ceJ!g~e=DUm2;qu~$VDd#o+7LEpL-2EZI-Mo(nct9*Th`7#(p2j}w} z8u72{Ra?89w!Yt!@cpTjv_VB){ z_aHVp{@D<(kU1PK(et?8=q%@b6GZ^Y*_H`0H+h+@DBK+u=iEJtclNM9-b>GZq>!LG z6a+hmMRlz1-r6AAs056PeqB-BTpEMZ<`ovgU%kZY`M8n1GR%)?iVN5XjVJR8trA>w zwFfGP^LUpzYDyWkX$x{8x zM?ObTDOMCqpC|~AowJD5Jew@gV`MqmMP0`C&nl4VkQdtyiUl)WNc@s zSYA;P97=&5xqHK`z1h%GEd8cNi{01o6gid9rADSq<9kq5sO6Pn*pC^NCWAXrd_b<7`;lA6`$$j1R8M(w(~=iW8z$yd^}APaI2)?Ie@*aD8v z&VHr}FQ1jF1GRSfr%|inJdf&L^+jZ4)AOTlSmme|#t3UL^OrxrKB@WUyy?P%#`@Y{ z?Y5l8t#2gIdRp1&E)JpLME&Yh2-?rm*qV2nWe(e*q{~ztq!aGy(5XsSJXeq^O%e9J)U`Ic<_O!>p&I9=d!v!p;bRuxOPLINCUJ-`hbM zG-gaCx5c0%%isB$%1kHKndW*r^=feHR_SJ!np#5D*kcwB0N6p%K~k-CW404cHcm_^ z%MJp!awoN+M+$KnWV6w{54CETgiltko>*D-s!+|X;I})bbYLF(a8AFUlNUdL3MaQ} zMpHyHp(O_{lJ;TQzs^Aa+VWmzlncLci6S{QrkR%S1XvE+6H2_64tB+*{rBu7UJMSF zJ=GcC#h~Xrp@zf3$A(c{f-&8$<1L@O?!=DaxxexucnM7Gxg>`PW@v;1v ze$C|F5`o_K^Ba8Z&=XuRX^?rWmXoHk5f^nQ34eG6-dqiXIQU3lk4r zy>can?B3xa+W(oSC(AC!`7e$!I49C5DBQMHhe(C|v&W@v?%$sq;e3TRQk|{Zo~d{% zTVAb)KidXb4s~jDgJcvHe;TwzsA&aC$ z@8c?$hgEdNyTvygv-Xw_T*e_ds!^Bo2##5z!ZB;vS}*tGV$2zxzU&caij@m8YCevJ z>1#nVNAo{1nSa_7{@WncPo-o9EhRNjVR6?VY_~K&Xku;6 z<(2I*v-;8$Im-kwQ?fks2K6?rGMVE zKpS)XBvu?t{gieo&YwbVy2u z|FC(4kDFG8+`IKJU!b6k_9V{tWEifIi+rXkOO$O3<@hh9uu^iSTvY}0PH|=nxwyIE zQq2a{9Qw|ZTtTm0+oI&{?Xk>tSluiu%-cq*#O-f@W!K-MgE5S##O7k26;o$+jHXYH z{=`gfO-5ar*pcFW`KG1}rXsWS`3z4F;NQXNcbMsqLXS%vN#4^#e zPD{!O9q}pzR>&CSSBO>g%K(E@Z+1qNVM|XXI0E5ZM^hvx%|_FT$R>sr~S)kh?+v$+Y^#GYLvCOnP9iEl%KCmmS#u>x;B;pPEp-@%Qk4O zjlI4oDN7J3DhiOuIoi>}`(e{lY1ulzPECpz3UIf2=vW-TSz$gU|A_rTUkf zoQgpax00pjG?#|d>J4O6DWN&5iA9OZ(Ni;^pwHTSylgCG%gyOg9*qek8vop=oWIkR z%;Lh$^UxBj+AOS`3B}6BD$n>%I`=ev8a2vUlFp)(`2N^+Smu(Uzz z@4m(F)?eCHxMHDG30`J0EU6RS1y@iK7XZ564Q9|V8o{{JpFe;8mCl%ijCc9TWpenC z!*#GQHD>(#WNu{hrmHr47yr`*5S zgru)<9)TjI;K(5}AB*BKYgz8fbKnxNI`)KJ*Eu1&&iUoVI=%l|KH!V|Adr>XE0~WC zcathA?d;>s&VnEScnpfwm8t)$u1V_hMO3KDM!Z(1V@2j?um0Ig{_`QNaDB}l_2*9h zuMhQpf9Y5M>mMZ~?9~jA6U+bg7(qw=D=PIrKjg&Aq@`yutRDIZ+LJ#%X2AeDOmEd2{~rV7>}8Xc%;nyyoE}+$hN7yWXn~UClfQ|9fot zEiRU(qC&++kKE8Fb>={~qF1^Ca?g>T81gVAddCcHo4+5@-{Ej12(p+yLjMaS6xrx} z=$QfOnQn2g=nlxj1DJy$k9uOUWbB^4{yDHR@g_K}P2F!z5MzP^Q0MvV5^IRvcXKyC1B;F!2Xp7ZKsB)JZ0q{0s(;`h89kZ=54ZDisoHvg*9yQdy2%!^4r z)UU1bQ)YJ;sF=t*S-ei_EOe&-^ZC?K1mCGpF0z z4ZqA6d_sb(Az>L@d*Ys+o_-|?e_iF6kksE8>_5Y(JVIUOUOwyk`uZJ!#=Q*qeg&7Ff+aSf9p6 zuXnj;mp$jPGj;I@{}k#h`g^ANG2(aq58Uqe(0ePlySt0{s!tG6E1C=qfhg|-=o^zg z=SRDyz$()@Yws9R22ohxbIG{&HZ1Ma>fUdyO;W!9-vgD|WNoSme4FCX*$?7?LktMD zuFZn$YZQMv39 z$G{N(KZLypIG63;KYkghlqe~cGD2k)ifkE`NXW`eXjp|1S(S>CiU^U0%AVPwMWKue z*&-ukWK;ZJr|$1~p8s~STBPBEf7pgZe%nPcU`;+Bh|{x5hcgAuMh?= z4q=hY$9{ZXj0L8GX?Hqwg#JsYcBC-l(;S)O| zw%uMc&ufQ#roJtnnwcRd4@<(d+aqda2 z-z*}s0@wczEaJgWxkoZ2hd`Ko4U+E;~zjpP0eoO z&Xiej-kG3pd*ip1m6-U0kj@QvSG)07!TE0XH=g)|IMezqvrb35r?O_WwjuAii`Sa^ zth>?C#6x!ZCRug_OTPv;_(oEa(6b&AX$m<9nbP5luN%4~7RuFJI$9Gljm{rh*wW&b z({SNPU2(I(Yc`t%o?x1UxZ{2MDv&eOWj;T1*K?#~tc2plw^T@;0Icu7l!lQtWN2q5|pgB3}qBPp!Z7`?qJ_nQs?CgM_EJjBQ69P2+`D@Qp<4-e;uo#5Aah!x6ZgH^rN$LGs1wz&&FXr>0UXB&hT9Og~jx~&AEHqV*@p{#I(M1%#=Ix%7PzRW~ZDs=5mTJRFU$9r?3o&mLMu?2^15g=XYc(&+wC zmwXTVI})vf{QVc=u6O^rxqrErAiFvqU`c(w!C{UdoMMX9djvoST7$os0bPF{QM!af zhJh=`Vnogj;cO+oi?AxYn2y}Q{S=6Ae>k$A@aZdWfTk?0-t7Fr6thC3xGFqJp`CXZ zAuL6WLb6)4{U*!(38tV;rXwQVp#zDRa2iCNhn)E%MV@&h=WXjFvm7(@j+fQF7-}nS z>mKS}xY32em2XeqD6~>j&WOP!fJl$23PiR~4U=2u2L~Q!PTmchEvcE(h}x}9y@zJ; zV-Pm=8w**~Z2g7Cx5CoD{7T9yttX2+3W z@??7NuY6~p`?nf7poJS#18+7w#3tFjDws8H4?Rj|)n`*h?QBgEL6qsVefzjUDRSjY z!7VGG(=y((RyOAW#JFn{im_Fr5E2(O&$e5KGz>o^#yrNm_5Q;L6-7mgdH@v)%Sz~^ zHd0#H0jQUl4tD9ZF?z2+)Uc*z(9_)MSiv2yWD8&6yzSxb<_SZ2Xb>bC{ zuQNTB8^3pTN!8xG$XHs3bB02G?YoWSiCltn2^S0iuo^Bm9y)M9;H>8!jF}gaSFTC+ zDP)1?z=R(`@q@bD#tW;dbjA$t<#3q}z+hDx2E+Z7KkHy)kC#`h3^gXOkTD)bZ5 zzgyS1y)(b{&20SFFC~!8&h*y_Q`M^zvu4|(z0OX|If2Y`x=o(C9HV+g_=(SS*WFbG zZdrj(!cHXbN~w$v>#^1D$;eG9L{1b91*x7@-F=JYe{X!$tNGx+6L|p(aDy-V8~&+m zYTB?-`YiFcRo_iq2zmPZFioc75a)io9}}dPB#jw6`Zsjc`{4OZQq3rgp5CM%D`6yD zci4LHBUI};J_0dmQFW+~*v%ozOW&w|Qu<6g6)Aa|gg9X;yAEapPW!%62vxAbmF+y) zo+d1uzMhnq*vrGkPiQ_IdQn*Tu)g2^zU_YBjB%NiSNJ)O*x_Kxb2?ncO$3|sb&PaZ zB2;fdl8acy%gH=8?JU6J=(52mW*g&6eES?KUxR zB-825ADpJ4xM8Ln)eT~@j2fNCr~5vb;52gk@rkd~k(@XxDyk(`f9(|?t(w5veD&_# zyFNFbW7&}_R@M~qN=V@Sf9{LHC<@qH(b4u3f85%55!~D zXe;46K#S#hS@YQ?&1ZN!ezymtu(aqcUn+nbztzd~@KcRFI6X&DcOOGR_r9V6jvOIW zTx@vp+|07s$)R_@r$^KAGDBQn(miyrgzf5PTmVIVh}^Xdhf?V;65j&p8RZMP0k@>& zT1bEys7}YA;H6o)M3={IV3S!N7G}sqf}*hr5r+2VqGc;q?6t8;_!y2oIPhJ=XJ}lJ zv&xKPQB_}m4YES6z=fv+aZBeqZ%6`%n{Tq1zy7-J#Z@G=K%#bemFi7Sg&+jbU2R*t z<%Gemv%B=&CTbdHD>hDEw^*e1raXY*%Ip*97WrI<@}+x0N#%E!_6AH_r@Zw=VorC6<)KCGXztqrwY4y}XF3?(?^mE8R7Wj3P%O zrr@}-c1B)Q6#LS`ri!@4RTNy%&Dkr8X8HulsSdy5B$W>SpOrBRLqAvs4^Vh;`lBQN zKf*uA-&|d@sauOToqKss1G6mZ*4WsXl07zpbrq;Gz9Uct$7e{$W`xat%6G9{xsph` zU>NWon-hrS(d6Y++rNLu^^%C9uAZI^6?mUEQ-NM-Yp-r5`#990jFdaJ2R?*KK_br! zixUk+~4~kl2orGQZ z*`d~!uL|ewe>P;kvq&PjSQHDsBTkxy2vfXw-%;F^?lwFBGfQdIxOyRR6xEUpNAWuG zseE$7t$!TAMai94%scGIv^oKIu(^JL?SK2vuw9kynp}SyV%)cLrbY1 zk~NA~B;GhD#iYoy;aoF`p+h}}8+_PqGKEjrGQR7G?Ttj|XI;~M113ghF(ocPH_Ce& zVxxG1eI&!VN3*Q5G7RxgW?(=GQQy(_@$iT_cWcBOWhL=Qe!`i(Zs*Bc1Q zb7ix6P>O{*t}a`;2bGkVL-Xz*U(+9>yf4dj?6krm=QKNE-5 zaIN(qhn%@-M8(DWXODMZTMr7v+*T~*P?ENYjpW5->-kk!StOd0>Fo}s;;*a_^UUS6uLK3tOykOS- ziY{gZU8iDdeJ6~Y?yu-cdHneY3)JIyUTfm-|D*4-E;xC@e~J9`cUBW5RRe`t{2=>A zq35*N98@wLA0^w~!v9HqC%+hCGOE5ISP8PD>x^FY$;OgUfo{NYJ*;S@Vtq(W-ges4 z<->5MIKa_2w-@M!+M-RpT|bsAyqf-ls=#XC7GLBKr8PEOghN5P>9IoqT)@o$_W*^# z0ze5CF1JHMEJwdW7)ntjm>aQNT-&xSrP@K>+o6rd|NrRC{rr!@yNq4-+zvo4SJA+Z z4YhIN!ru|N0lTn`bSc;W)yXm}|ofujeBJw=4-B7hLPA|>pv z;ZFmXld*e@HVY0}JK#%j2{)GbC7tUEHJ~UG+m!D8$HN4U4)`-AfKx^wLnnl6QeEui z47q*#!oE%J^r-lWQ(&vlyce386~KJnV7VWHviI2gTinMJPcYEa6U68^>7#lZvjjEo z%Ld@6Uyi-Av>4nUV$*@YMMnj4NUb8)bI_Y##>0ILFAq}adU#0V7#~J%@GSfCXLac6CEQn^%U_9z$Wf}`a4=o8ezkZ{l=cU~6;CcI$MFV-nO#i`e;~2DCFc0k z__c38X{de?+tZ zDnET_HZCnFn7FrJ&ixlJbrf}CuFrf?H!@OAkOPBsJ4#C~T`ed$AKDQYAl*k2H7&rE zgfR2U@%uOjdEg%cvHXS5(9nR*ya_TkzcTg9{#gmyUa$Vun`y*8ct8wRfDj;w%F;NgW<`cE!ZqCkc$evO188s9jZ6U9`URpZnZ*v(09FnJkei1CXU9v*%PP|p#z3eWAE^ldX@8%alo=;?O6-^3e?6ugDw5b;`I zV@G5B1||bHa9AFkzOsrv)MPZL_zx2afINQuc>LRsuy}Y`R<@LoWASsD!o(3a4+M=F zl^8O+)u4qnEm(tZ^akc?W7#=&uO9_V2y8P}lhO$LvK>+=bMI*wRmoQ4cw|i8ZCXn@ zrAIUW0)xj(MV1`~UmagFUESTJd$^W;oA*)vGju?dFAkLs97f`fJ5_W|%{)g`&-PZo z`eO0r2;R3h_|5ij-;gxl^E1fH z%TM(srtUcPiI;#^a^B+N;*^+F2DX>TQ7jT#P(4~rw57_*$|zqHFAovX-PL;N;6YU- zC0e*~RPY^Mvu2I{Htu5Sil@hLumHlQC_^Koj?+G~8yHq__)E5VvZkb@@CO0d`TG^; z@V9c*7IqtM-vjLQ%NOvxcges^Zp9|qlYKk<<08p9Pl7ZLZrmIFU~VywHR~`u4*W1O zK_B_-%Q!yjC6Ma9=capf>SbhP9s@XlUCQOw8T2`~V`6T?Esmm)8$rDnj@1(g)ovWa z$Lzq7@d|I&0Y3Fsj83TbA3v5-ku#eVyaS)z_h3|2RXsP{eu4i!-Y#z39Kad4;;o^6 z>o#my=H})GOB3RH2OGxQPw&G`?KcD`n0y*NX*&8LV;Li(z{YnWDc|)=vG|D6JBULH z9(S}@aBELjY)!N&p4(=cHSSKbu4Jb97v~GF3R` zZ5Nv6G2R{GF4W)t8ULn;vfcvsn({?M_6_A-SIUv}V~cw&mowtpN>Po}JXBsh z)?d#|hDjLBjF7+eB~II;e>o%L#n4bTs3F@sIxfP0jvyI;yuQA07ssKwlp+%j9IY&? zR$at~NWBD3v66$sZg_p@fy=fs zCWkZdR|`17_BQ8N-1MLPd_vR~c_!zg|9}tf{#I zGRLFV)|YXh=$`fXvg}H*7QDl_{S+-Mxbc{G_{@3Y1}bMhDTt5W?TCQb4;KzRxrl$T zia@j4_ic6bK++v~Qr;!oq) z7|Cf2pF$m7b2Zo%Ei&^OuVrkTbFf61on_Lov|i+v~)S3 zKHuNbnkwV!s9WK2B5>B^#krLj?OrRF6c<<4*2cr*I5Rnjd4|eKd1sAy9HXR?#b#NP z>uC9LnvCQCQVd)*5FNClnMlH=B@2EzW944?er6NQY-QDBFyl zP;&`&2bSzP`caZh>R|fgj|n#kIL4g-`5Z8mU4nP& z7=XXh`sxG(Q)vz@(&Xdei+Ec>wgs)z4bCIZ#>?}wNs^>~-5 zy1M#vyM|BgQSPh0gl2EBlxKh3n(;@kW&DVdQCPv=ro6tR<@rqU$uWGjddH!$!1hm8 zJBCm!6jsc2G=-$*B`*Suk#DTou<*&WRYm_I>I)n3{ryr>QV>I_VkyIaQSdChB)_4Q zGOEaW{@gDs%O(EJt5-DeR}*k6`fdT%{EiDSgq1T2Db^KW`|#ldiX=L8^Rxtm#J+Ol z)1h5Yqz&>CnekyR?YYEo>fmdyPqjVS1`M;;H6F&rEkS?zE>8P#xqU+mn!DWG+?Ozp zM7bcY?MD`$ipqb-tU ztontW5w{l0+4u3|&7^38m0n8ouB;YV9FnQHtjE|AY|&)INKtt7UHa@zMP4#6;JJ#0 zCuEwx8mGy{%a~hS;6Rqtj0{OIG8ObM9VFEbh=ZzAP^e^iwS`Z#2l8Ce|~=SWG6;NQGzr14EAfp zG$WDt&^ui2xAt~lVdLxv*y|`?{L2CX-Dp}b78c4eE?agxIyzZ02*1w-9QortNrF(M z0k_o|dWJIx!0Z%e-8;t%VIN5yO)Gw0<8lZ_DJ+PCAXO!v9o9oB@Zn+Dt`Hu^)bG(M zGPb2&V$gf0`@_25_#Ylk6Ya0)gpOp;cXxLaK$+yA!_|pk?R9l^wVx&kqK^|{3f(D; zWE9$gm`t@_V!j1e9n!b~nAnH*$Pu4R7Cn8qth*R)ESYnY@(`1!SETX4n9mb~Yj*MD z8u8P^{a~F}E36e17qJeFz6$I*@ztD;43eQ+J^Frcf-lA2Nm6fkw zz1kC}D?sz0+2YixZP+nYpem9_hNy1So_%Pgn9 zb$1^hCTAIqA~tPp=Rx%39f+^5`7H~hXGa(QR-2%q|(DBp&^_G-Jk9ZsbYSqN5vC=4F;i%vVD8qI1 zAO-)zP55>=7BAz(#a+ihz2$OZVxl1u z&$~^WoHB5LuxV;)^2o^*8a3Vz4(7q4#xCq@6g!K zCIi?>n~YAs08B`u2xf-C67ILCRyRjQNAIeKIiJZ{Y={S31ij2I$IbMp+5Z;WrdGzj z6((80XDNU1sFKIYpno)}R^s=lG})=O3s;uS_Y-Rc-HL@RJIYOyJ(K$CpAxVRV&ItHF?A$Nq_=jXg?VDcgA zF?RA}9_~OoCJo$vEU?fu>S3ck?s9c?rS&DN7dur479g9Z;^Caf-@QO6p!FRdA7@i~ z@0XbIvk#z4{KQ%|wx#FKpRd6P4d3J8!-urKxiBb;pTW9GydxB^=_DW|v>NZ}BW%{! zW)p?@CgXt3mVau_!8=T&h`QorqeE{5W=$y+7drL>(QR1l6c;eN#H^ovBL@y16xN$S z7fDa8T(jn>lq7Kr#PS*${ziVH!ratj!(#8kZZG@MJ@qC@A98yiC7V5|x|iMkhMgoO_}e*{0vkHsl4IyxGkQZ=-H&FkS&0hL;XLpGf!)YJ}? zDynTD>Q!?+P&ZbcW9ZAvAZr5cWvn^!4nIOrN_n#`EhE=0Xq7H43QL4I{+Mb0f z!NuM(xi!J4ULRX!U0P1g)ys?KjdbpUFTsUu#Y1xAcjA>r*BKidV<5K(XA#+gYn~q5 zKz3eOk}l@TdHeHAJS%3zv6+GBdr377dr|3Z`=%?H{=P0RPtX~;^I{0E?<*9H@akNK zTzjkS=QW?`ylQM*zW_JlWuT*?qM{C%o*-*vs=W2|@#9x866gS^PTd(dIC5Z6yS^Sb z^kW{tfTO@0i1QlN;Ogw`T+Vz1s0`>+s@7}m^Fn$!j{Tj}Y zS4buUVZ(trqGf1E)-i$T3Ac}2EKaFAf{DDQ&go*E$KsemEs|XI>%f$uU;>c!IVv+P z?Imh~oeHzl)7+Sb z;EqprJ&d(evMl4>cjCl}!ZLEAs$i$qsAe6fo7Kl|^#+GIIc`Wl4iKf9x8W(;0B&v? zRE1AgjZ+WO(pYdh5;_ zoXEGvG@)}eR>CW6>pD97^6XcroBI{gv<`3aVdNIr@Yj|`I~4m(;BkB(|7(qx%?dR( zE?v3JaaJPDcI}yQ8=;Axv&^jge;EM@0ohi2mDPg!I#Ia5t984= z;r_t;Hj)t#KAY=MD-#9hZ0rW&NA2xz0F<=AC=EDea(5vv!vfKy=jM_7T$if(`hdFn zr5iVx{8$VNJ$7Ms_DC%l;Suzdtml-Lv$=zVi0`KWlfHgprad%t6GhaAXqmNGvioqR zuLRGJ^!$o2v(2-2sfEu4=^UH$UDPup@8u6-Y-f}GUM~jDhB{x&t@Xa&4=&SGnEx$q zcJAAvgB|*R3C8I#J0S0;QGX;re_Z^H>S`@;9&J{|BP?zBSH*TqjB;ulUB}M>-wd5C z5Cv&~@Qg9cco~C`HmVnI5DF2(v)C;ob2s0t$+LRb+R#c%K4(4S!p0dmnLa=Kr#W%< zaD83|8B2imP4H{1E{s#Qf?GreL1ffGk?Y4tXCaFil!#lmZ__BI>~6ru{Z2p&>h!r_+EjUyxg?`(mu|&&FnG$Oy$4XY?KE)2B`a zpwc}C8p0IJ_Q>nDe4Q9Q%CJbkJoHX4MoKpfPfV1e-2|x13AQ0Eg)uCAKCfbk`{SUZ zaprL*(nI+$+r7e)uTC+Q zK@qSDDB2<}gJRTnMQvG zI>9=iI$t7$8c^zDc54CdIzgkrWM;$>`L&_p8^%+S8G$Y2#3WmoxEW~OWShfzFs(BJ zuUi_zdDPpkC%{I=aI&)lnNLzaOK{@tdh9GB@PjNegF?Pp^)me`y;D7CfKrZl{X%7q zB5V&vNohFzb$ZAE!`8N6r%OskW;1e1uu7Ehs=@@D7Do7Fu95lL0#gq{ZbE@i;3R-7 zQ#+$JDi=a9qO_T!jIS-@uh7;yi zuX(kFSFc;Q6o=06O?&KDE+M~*gnXVI?$VQJ&@SYOmB1pxb{HU zY_?`>S=J*^%SSe1Y1aXNbf8W{OaS)?I*Gxk21|tZzboqW>+>eyOI9auFbMxkL+{gz zu-Z4CU5^9vb7bJ-v)1o|ahef2U}SBuf1E2i?l*U~9S*#|H3HLdlyFBuwc0Cux4Z)H z>&cT_=f+cgBBbv~2RLWB9{zQcU&OpD}JED-E(d$Xyz>TZ!r@ImLY7ixh#F(y748+9jLPSg@&xyigM zYvoX}lM)NqgWv1dN}!;uD-6Pv7C7gR=8KVcKxkp0tgNkn{FaHu{}wXN4)l4as}_}* zWo-JDCibbNU2Osz43#f|yhAaYkeT47**n&~)q!-?1RK8~d&k zJYXnMrtJl28>LU0Nksmtb>nOA{x*x|ZtSczUbhYkvZp~8-;cd0tcW>3H%-f-u<3^PA2Vg$FA(%+C!dlAn2Wm2`)pwq(en~I4N99lk_$egGUxGxdDfvaO!X_qi9TE%)HoE_88 zuemGFI42sJ=H(%$7#nVeiSYGfED=%JCmu&(c-?{Q2`QdDkA}aL1enxL!56+JArPj*_eB`A%b)E_l;Y3Vd! zBB5O%t2Ik-`(9%SHnPiUXrx#QF-0BVZ&BuH*E0*t@eURe>^ zC3lXiQ$lj_uV22`*Ip1Y^_?E25fsd``Od8Hz7y_GmzckYpL3^4Pgfl67DE>McuwMx z%uhep(ta&42pV~H>E-2R$h&q5+{ghu&}yCUz-*o~&DynG+m-^|TC$Ap{&~%y`pLEm zCx_NMO>sWImfi|u@ViPUY)p$3<0#psUmIwea@O9pJ?ZIEQ@_`=%cU>2V0+I;I@qi# z+}wLpWL|@E8cZ=`GRfnyl=9hhZqgL-l8R3fOlJRi;Jsz68#gkA9(%--D4#DAX z3!Yn`-PA4<;P%_$!ZK!s!=E8-+3nlqLwPRCPPT12<4o7lajhy*x2x(D>v~3wXaUv{ zhUHsDoGUpZZW(G(V}ru1gP^X3orjNnL7Eo-C=Gn_5TfT>Q1Cm?$0y<}*lQa6J9Tf0 zY?Ps$9HIj)&4H8iNLXQ^24mpO?LjnK#j6ZdKI z-R=fh`kDxjaL!ZreKr{utO*xelzUb!W#(C3`eO}VRwe#^Ky4GhCVz%BX>CZ@cQ;Jf z`nBnP|G>=>YtGG_ig?*QC}O}UG)*5S_bf@`6 ze0*iK9JORZiPLvC|dZClrNEwH7l;!4Hm+Peq3wHsVh zjQCi&J3GEhDe~tb3mxRqq-SD34-*1X*5U<~VjnE(u&30X{%!VGSEr&YI3OnOLa$q_ z=VI{S3R9Q<+u6wqwxy%LtTG--j|>c3O!s})osrL6B|iUQUBv!vD$~l*Cy&Q%G6j3K z>FS{v5d-ZHzQWRyhwrSL}F@r{rsFkQNp`NR!%V@ zZ1x5Xj{5PGt!=|i8*gu?(6?zjxOQmqYp+?|E23<3!_%v4qJfU#ea!W1-);5Wo@z@MS^u!Hw5~Xu*elyt zcd&?oVa?=Ht`Kv$E_ulQ@7t#`P7}gc7Aq#+)sIk?o==}%?B1dBFD}4$+cM!urU+?0 zhY-MTh~_EjL4=pH^U*<*_W9X)E1ia#$BH_^o(kMFQ?qSd5-sqKc)Sm`yJFiMX3pl- zrU!eRUAltd)8{T9<_-Kgjt))wb4i-tO)^wc)?*S=5)g8AMW`8DnpFn4v~=5FP=TE0 z`68zENa#E}xZLjwEfVI;S=TVU_${`>J>$2Oq(RYf>rj#U64h3>{;&+!Q;$UotU4Zh z42+I;^|ur_@m0ro2V364OY-jR`?r-*QNOI?hV<_0Wr(=U>sfiKf2#evw03!s9Y^%U zit1d^wDUO{c1+7c1W${YGQJoO%Q$!OQkQ;9n|ESCA#PTz@s$~7ewAH{WuA!vQb!DW zyzGA{{MVCC@FM4JNHi1uqO$p-^J@*W7UvS7u(&ct(j+W|b%!rJbGD8I7mdYwhgq4{lr`_wCMyoXGGH7nj!hu(|)z z%|B{9$fu$wna3B5$qUVZl2vT{W_PFD0y=|~-nMH-WxG@iQfa|keRfE&c*_D-G-ZoY z7$kK#Pg(}|jDXj5=Iq&|5f8PTMp^#+V~9>-CkZZg4H=67O(spu1oCa!vX~G^Jv=<3 z=e!K>^=O!CvwFo@71h3tN(z$hJ3Rk`r+9ls8!Qi1bmzl=otImv$X2dAHL%bT9?BiC zJNj|`(aybx_bI8k90Vnb1V|pfx`*#ew`dKU@!xs$%Ju7QzNnN%_Fjj)_*H9bkx_q~ zLza8x7q(rsR}XX>AN-(ZS+CtT190fyUpCv99bT-cl5c&YqCQFJ!Ku&X=E~!+0UnX) zQBgV2lIOe_Fs+h>#lv{zhx5-QZU&@$1=)$Dav^%9Jg%v=uDdAi;MYTX@8px#PjLQo z-Q+*D{3b_&)&h%`5>oAR~n}`%>tEA*Wdc#ybtAv;>gKv8my23lId7-!NtT_)r&2 z3&KA_TV@Fehu~d+JhZg59%TJQp4m=J{au2tH)3cjYWH=A=gg01q_ZX{Hqf@iJ>k6@ zY!6qh{r9{yr`02IZ=bkIeY5V(D%_*?o}Q~f3doFlsz+fyz;3))L%X^S*y=?7No3?C1*C`5hM{Yp@9Yv^@xPwIZOmL68ch@3KkW5xs8ucme(IawIYw`)+CysoNZ#%j_1l7rT3E`7QHwOQyGmQxh)-eqX4iLveKcQy&$tCYAfCK((Yd|z2v z8qB9oUh60jr!Ysyp|DspMxKfCfI?AQJM_M#>lDtn2j z7^E{J{9qYZT22#Pb)gvo0HCw3}7yz(dUy2Ss&fCRHmXvbQUPy+EytF`$NCa}Q&dG&)mo@`Rsmm>Zc4E- zAt`UrS>w-RztIAc4V-(~!FATNDryl|bbCBc0dmh9iDw!;+%$#d!$^_L;3p}1?;h=( z09L$g-@bjKn6DmOho!;_hEK9q;M2h^E}Zdf{~7aslu{ne%2;?WKRG32GLMhn44!`a zeLXj_Sp+PS+*5~~C)Eavuia|9TbPiw0(Ul{5dRVwE4=^D=ANL+oAV8ZWQBh5nG){c zn_`-&-Y}@ST(H-p*5x@=k-kw7|Vx*EOnKn4GmRdOXlqm(Ax& zpz_euU^&6H;f{1M*i}328&?A%n47@s-m~V09jh z`J&==;M9hg{|r|XgH%rq;81;w7b^`sBgpwTVk(pC)Wt|pV8)V@ecl4I%M)}3@Pi0h zz`3&8GkL(-F3>&sc~swkve%!-Rz=(L7^?pqN%TwaE-b2QDNk7TKR38#A$;+z>Y8Cq zOp6)%6b$ZJS%pi};`V;T3WHUO@4&!-(-7O5HGMBqF{7a38@PiCxXdDkmc843Z z;DeWdlD%$dSce@`GMCBD`duTt_11Ob&d#Gw*19LW^e{?_3plj)N%~DlD3E^s3fi?1 zaD$G1O|xJNdX_zLSdA?@^}sqyGlM4_mg5hL=CsAy?wB0bD~+6-k#`eJ6dC&;r?oJs zU?KettizL%2fglYr$b=})7otN{Hj`pygV`YOoQz&>*~JLXz6_!i`w#N<{j{1u-OcY zJl*3*p$PUch}Ye6=bVR!O=YMFp98^SK{guS1Y(E9lVf%IZq~wvX_SbF2pKct<+%XH zGV-CBeKiJ%V+kx7z-J7^JtI-vzJwF;tH7n7fv{Fpw6$+{|Hc%BP`9Edx2;=iZf=f9 zT1#Z2QV+J7FL{_(^gUeHHA!&&U5P8*%P0*0xE_Bf{uNg_lkghXN$pGw>dW7&Hb59$ zB>W1*5tLf(;LaxN%4Vg<9MBOn7ktA$nlI4Bo=9G`Pt(VHBNN2xUer(KEtAdrp9>_A zOKcTp0pGgxMp{(8Jh{3*3VIFJCHFObd~W9@CAF|G%{ga%J2$rEbtBxx4!h|07=Ec& zZi-61u}{U%BW307c#@dh>;9pvY$cFqT3>Qtlwh+{RaErFaS}u5;Veo^Bqb$j6!A%I z2b;jwATlr&*u3L6)~;PkI6(yRK2XvEp&yN+)$!wD(y6h7sHB!skD#iLv;`k#5d{Xv z8z-05t5=__gnQ0@P!5-J`{6)g#VLd#wKBLf7)OcV&z1m`E%BKf<#g=(vdt0OpH4cv z69j|gC($Urm}s;;hC}KYc2iPIkge|od6A(}p}1CX$_r(mZWAHNgp_}8?@6LtbFzFC ztD&6WTtu?PyGoO!`)5Jfe4AM%FNhWJFy~`qX%FUY;3k=T{rc6P$c{Qt40hmp)?kFn zN~z!&zC0r%FK>o}H2|mM-9&S>sHfgRwO+cqy0KFA828aA9?pI^ZPd_XsMgf4#M##$ zgDPQt)ae7=R%LU7vqutRZwBrf8uuEMFZ*M#^4Dy}UF~vgln^;QYU}?ySND%IQgO0Y z6U&R1xlnTbx{v05N`C4=cVFgnA)g!B&RKgN@AWP8`dDkwVySH&8huGcrS$kebGqU7 zS7c5{iX1@oT(YtpxUEl8n3gVm1sw?dga|*5un(Em@1!VHIkpU>gyDZ& z-GR^-LCk4($?qd`2x5znXVeLq${F~Y9CXKg2~p9iCr`$8H)9s#NJf@mv#)4HVhSm= zIK9SJk`fYFKP?5jh09RI5MdS0d~#5uB47Y{3AOV+?O8nLm0%~5eF=A-=oCRKBb-Uh z7NhMA#6&P2#2`uu*MK203k!=cG;&;9w=Ti!CnCwuw$9cR&l5vmTI$iGM>erV70|It$$>niyt{Jgz)Y#t^SbYCyOe_wvrv1bL;Vu}{rENf3Z zuU@VbPf6x{azrnw@`Q)&myZyzsi|FP60mn(z=n=!lO z3WNphKXg~Lp^+9IyTyO>P39i&gG2ob*H+o~n0fk)Os03^?KE&G{}8cxXsFG+=;^bH z$>KSqiBQkFVzpa;mxa;N1u#o^puXuHZ;xQheztC#Dlx(9U zBr@i)2dAL#p~S_fi&CV*L-`CMIpjIQrS-zrtR_9rkNE3if;D5yJ?Nfcsez@$F0kZbF7q1%GfwUQ+lV$w!D0LP|-=O`bD0`*8XZ5 z_|)>Z(kSks8J_8fNlAu@{rHcB!)hG=!ry;+aB?Dg$01bCRS4Na8iRCJuREqk#ZK)I zKYYKck|9j!wwlux&G)=Y%*^d$r`DYxYJKTkRi+{n%9!hITB>Upciy@Tp`!D1ha6)5 zG@STla)1%e{uv)KPh40dOkt)WUvyT=x@uh?9k_-lH{?z7|LS+*InmN!~Tu4jO@ zFV%MOqVHPsJ54rM{iu7A6;|&qExtfQ_q{O3p)9s`qs%oQ5vj!h)}ma_(q}t_287;| zq~r8iKG3pk`6iRRiFI^j$}N{*xrh-J6*i~Ec;|^Mv8FuvqYLx;olD3QAzh01?{nY- z&`_24<*tK^Y4Pp#Wyn#SZE7#-8=`^+zAy2-Zgy$hX*oC5_ipwg=iSbIx6um z&9)b;fWbwXGpF}f*73P1<@<>7_74ECzcr|>WYHPdI?m4-)?xt;zo$B!CnlV--uTf+ zv@fQZ*54^MXp-{M6|lCa@eN?L7UQGB?^V=pNj15xa4(`Pn+EXY1vJq4uD`SpL$qgYO2p4J-30-bp@EKl;7=h-|78ABdR%9JH<)b`-SJ}mi!J63AW-h2L!8-%UV0l`M>wjW4<4C;CwA)zFr{(jV^(fgMt+TiF8v!R=K zXyMZ39+&(TLEHcSI<$!ZQRDZdm!^qHyU@b8A|)T>4){fzIErp(o|-VuTlFp5-bv<^ z<(Fq4^IgDYbTaNntZ0^P*8!gsmG7rSOh0*@ZZHJ$-)O}Dist3FH@|Aj;>TQ$Gw4Je ziVjZw7#S*`+ByL~R;`bZHM`9+t{j@Ga@yCgeUX6NYozs{VEF^j4Y~=R)WUo-it0+) zEl*e;p7BIx@AFe)Qom+gBG}!#t~KkJ82o37pj4_Kik;=hC-j>{__RM-&iqgx0|mM% z8b8RGzVMFMtCn(zgZ2pT#)8tm^TFvc2|-?eIq!czz3x0TKM9}t4}~?YjFF;CGUUGL z^IJKk+wDiNNtf0u&6}Zc4Ke9T^YLk)Y=eB=%IUaGf=P*}Ou=ut%a_Z`H8t*}#>cZ= zSButg@7((Xa>}xL?1%dI)8D?OObg0GMSH653W}~*ww}$;FLn69F4a?)5}FvbV#Cw< zneSH99zP=|CU1!TcS`%;7P3!aGkGw3_(2OhuJOP3;#f zW_}r;rGwflBdA&{;z4ga7obCA#0nX7(p#-EGvP?H3V7i#KiBcLO!+FDfbQJ9{4jgx zNv;a_DVC`pTk_=G_FnN+;Ac4bnISDxP()c+p*UA)Jgm7dpK%!mCe~ibH$+QC1l4C5 zBMv{K#TN84XT#2|f6N-BcAr?mvPq<3VvPREibaDhAzsfNqMP+wwPY_`$dE%G&_?NA z2l17+(;?%20CvFB6^|R`&J9x^4`%UZF0DOVkZ37iTc7@42sw)7mRwK~G+ZTER`br! z4w@dV6^Kym?pkDcq%1ir6ssXzek0}&b4fZhn1$2Rv!@K*RItiePc^?-3acIAh>H8_ zhw9DTG*`gr@nwcJ;(E)Hqud7Rg@i9W-gn{Er3*vFi;q{{DLeh`TZX-bMTVUse?G?f z{n}fUDr2^@%HP}+s&>Q7EW-=)v&liRJv-&iW+gt{*iaE$&MZ&u4Z7n}bzeAS<;_jP znytn~9K*x6{(vK};|y3R&X{PtH`IDyCv@jI-i8vx_Ch0)! z3wrN&&?S$C#!05Hy1K&|*#eV88wPDnQFL^7!yThUbZWYcz9b_m$`@I70j%mV^%9GJ z{;z?A4h9nICBx?JUyZr(B z6ZX0_t_Chi36}EP?3MTIp&`M|GH!$HPt0)V|MQiwL03uFh1G0~JgoRL8l% zRHFj{@p!#3!+$;=ew7gYk07vC4Up+82y}))CW??=op321Pyn7<$mu`-^JU+4>8~lq zp$9})W?sYrkbEyFxe#0j;D;$Lxj+yFu&$JWLfwKD2%4(bxDcX=0*CGCwode$!=Rr7 z5#DjSRTc>t^D59OQuvz~4t$7`VucL_sRMUFwS^}20Wfpu%5FZ50u)BnbVOtdC=1{= zGupV1eLjFLpdoq-Me7LI`~pFaz%%`C+$bU61MFVL@k9UTjG){;0Eg)=B9w)W;T+88 z2$Oni%3~fcFVNA+>LJKActap-U4V*4b=(sWn^wFo{-HpW;XHQjP*5i-&UgCGfcgR@JKwr(bA)`&VM!-+exA#s3Az4%gFb{{;I)`&*AAu0KoD0l;cX6?ZBKwfbs_k{~A6HBNlBse2oqYK_*NP z;N4PE0ibi^dxNpRdI9`}`buZ@V-_XnL#nX+3IMtH8YVB-fq&yq5yX~yiz(4%7Ny+0 zyrtAJIFfb%4I#d5k1$4gjk`$vy0qokPF;nRDJ?s@ZY(P&CkMt3`px_&PV_iAt9YgG zIBq@VW?fod?Wt4#)sjp%XcTeQ<0G-ld*=2wWIpSFd-a`Q0I?by88G>Z*l%4_zd-9l zC`^rNf*;G1yGOYbcwxpt6|k&3)ragscAm{NoSb=L>sLnT!=eQ^$7+R}aA_!2-(DCy zUignC#+kpq8@sF-xvT%rB;pce~OYtG7eUY;mIr_sh;nd*a`6yWMf)_|p7(4BN z6D~-_FClJ6R}a%zn9p8%8s#%T+eWChkp2)?z$M&Aj~{0M(u6ji#`hKb$b6<-&xm&I zK>mCno`W^HuRnI@!AHu-$%I5Y~iTykG>aKqH ze$6ejJ#m7U85tfbg|6qi&B>0ujbKdxCyIs^z};pIoT_U7*k9F98>JWU?VB>iVeSolO{`2ytc>jc6H|x63wFw@B*Ft37^OxZQd=qxU4y46v zvL&0iuPxk$3>c0WqfK{ni(9zFFM_=4v;fY+;cwT~)pZJr2-hxHr+HxSi%wAv#`S!6 znk`xCi1Ap4+@1_8ISg2k;&lWoM#R1igFv-U_}*4oM)qC6rD|~_Dwurqb5=8NQ{Fbph!~zDX|YI4qdv6AVokx zKtPJdO4XrB2LFELnq4#@UBCvP1Y*z_?Zfma z+{DzhQ&E+$#iPK4fETuh=oP>j_9q?thLMLcDq?bx3Jd&dNDRj~0>&1H!gvE1e?K&o0;+z0dra5)m!MRChxW7{6tsza$d~s%rvTKxSNVFc4LI=0t5)lzTKCpa z=`b<>wO{TRoDHc=bbgUL4Qrwv4I{d6T3?yH3607t4liae1GoDEclo+mtfWj+9`~E8 zxTV8B-Mw?~>eYgFCzD0AMWBQjXtrB}&c$MA#NF=RtwXO;CZgNa%nUz#{A9j-`Xh?J z{46*`In09PNv;kQIfkIvl4jtJs0a_ie`j42#H4&u1? zGNOLy0ed9?MLzHgK%ZM88c~3WDy-gqf;jZSPA?hu802D&jE}3r0lBNIi$Vp_U61CH zhp<7dJL`e_f7z;40fpm?*Pn($J_*L`RAS6? z@X#S0x!1umE=9yegv8WS(o<1eFvIxfjT^ke!b)gxX5dPJBKDfrsmrypky4#(<7`dU zzYXvfLln36%hi7XR?NA2b@$k7aw%k~U~{wPcP0r)IZmj+18v0-EOR_4<>&Zjbfw?U zqlY|J{_ZjklVYR;e5ioi&vK0GqCprL9^b4)&%jTcHz$I7ZK`-}0^h12OaMqpDV}R- zkBmSq{+y9zrnO7A;I*19@m0ZEz%{YbKhJTX8o(Wo&eX~8IXK2&kc&jzsTnf{;DQPP zN(D(fqVG@0FlKfD!(f$Br_b>^TWn}g=*Q#m;|7+z#x;b>{VSrk0n_+b8!8g&!-hyy7|39C^XBDOSNRX=^& zXeN9o`2mM)^;V5v@HeM_a4Xebm$&{?U0}ZPsP191~ zW`&N|Fye8ZKP7+aR5Lbx75*k+yn<_<8FDQ*PtU@~ZIzYsNE$ypTet;st_46uf%j_n z@$q>?ntk91K##&G9zGtPl4`}qM2G-#HCOW}N-bNqECY>xNodN22+FpTOp90u`>GF- zSqyX*7Z((KoZnE2cK}^(?zRlC%i%ihd7kVIIaRf_r*O!^rGKt}1S}~Q3Yx){%P;*2 zb8JKoN*yOTip)(i&R@g~O4oaC7O!7XM_zz~gU-Vae&oye*CaHsSY|V=t*u&!&PpJJ z+Silc#RXhfPG^5X{!kV8^;cOeh%BBH8}-r9(*I#0^v4#nL+HZuV!y+>OVdoEQ*gaK z*9$$b{+az&G#B<3w(um{3Ru!4Gn4Zb=m-Vdk&o{?#$KJWvpwB|=gIt?|P}qVH%g*c65;C8UYgac)AFqd((>SC%#z0n8e>s$jK5TVkr`U~yVe2k574nze zLMadFc_g{NVW}W-kSsn|O?UP!%D%3&t?;`ccU34lE(aQeB<;*SGu63l&^V3tB8QB? z1cotwC6{2yjh!mFV&G6??5@$Ss*N@VT-g`jD3KOHF-U%3o2zo<4tY)5j(a2_TzI^7 zZ8T9me?DrvLda=@ltlqiXgx=-(b;Jjr6(jRsD#DT$^+eCz=^t~v@}n04f(ZLA@;gv zzrsKUlB)!`r#qlqTMS)UQ=dQcN=mlAbH)j30ig{H;4$Je@3w7+U|gnxo00S&!lT-z zzy1h{p(bQJjWGUczua(g8VwwqvqFP|6QHNiLms0F!+l>m{h{8Mu5|-2^8x#uj3{CP zQxACK`(alfuXUMg*u7WZ17RGa2jV*CCbIL8W}i~+xBaYzKplMCIv^r%Q=lt4?uQtNVWsNDcewe!tF5PikYKL57erdelq$pmJG^Gir* zqGoLZ!8#5GkbmF4=APHc!$o0Vi#pi^7kDGwLf}q$-or9}6+Hv`4;D--i1Ty1H1=$? zTo$2bi;^77Au2EU_RgI5P{daB!X^VI57Cbw4`AUrblu$%GT_ax|G?k>F8S{5aA!s#0{bv4)eKnnu|fWF5YNfg0wsex6eN{PIv|1YxuVBo<<@4?J@07{7=} zdYgUR#c;0byYJib1T8il>(>0(;W*TY9%UPNjs$d(7~?8Y$-a(la&%%4j6jL&E2dp2 zJy7@PHq0OQs3kP6*RMhVL^gF{^B^&0PuDM7i85f@wsMq{fw20lI`HMw3qv>>KSp=+ zQF@@Tf!mubvtU@8-5eer6`@xF38*y7kB$9vv&7{;j|&4L`+#nKVMzQ6@1K{j8@#CN zJY`@FlVYUiTeg+M#QxRpEI9mBgG>)ZBDq1|k>EW6JvHGBvBAB{~VL#Dg*l zKf(tNL0dTi2hb@XHd1PP>8 z(+y6UcM1$vtF0$;mK_wQ)He1p+4nYlVOTVO-v zUk#b2>OO&i#vVJJbop8@=vRcVMi_Zyw%OA(wJQ}T$Xdcy-(%^jRr}CNyqm>NDKce+ z7q;QIhU}a6we|RPELvTT(upHF?omVN*mm>mZilPrQM$OxT!D@~ur&_~ZUKFMEl}?F z&m*aW`9!8>3N_25v#3z#VR)m780npaek0vfQb3^Uw7^k}U%_hOM_h!0=;?7` z(11_;P%1q@Zt?&i-~RU7P>WA=w01|x z{`A36sl62v*_<#&-$Sp0Nkphu`}&3W&(J6@xW(RYaD&id;Fob6t;qnhf=Jp8U=l@$ zWTDHjX_8ik(OLDu9-AJS$bH83FV*%U`cl<(n?J^~>U9I!fnk`on7>JjhNSLe1pr0? zeGe446eH}X=@kixvXT;=NQzOAC!h(_zX5MAv z%#228ny5-=&Ya22k}{}RgNooZZi0I5xliAhynNXQ&0KT%+*piUvyPI@SR{0K^eEJ~ zsyW1vkXk=A+RM)=Z~5DUgu8cnX3#^O1jnR&vwy=Jv-0MSnRI5X1SC!Jz$(%KF+Uc! z{s3Ez6uE&UqfXO9vnAA!1W8H0}0`m0AQ|k*f(ab=36PB!@2=_rc1-R5Hgj_Xe7%G}|6y#RT%1uNf3(dPS z+$ART;lH6Hm5KT9B>+`ql*JQZ405{_ToNkui~6)T-{!ha6z*l{efhSWZklkVrZOlX z-Yu>`+|saJy)pHEVBpUFiWYXhG41-V&jzzx3;F2{VkW+T4jUn_kC`mK+)tTtHO7LQEM8BEaUHP7GgU*V-U+|a*UI|sxGxc!YlS+_t%n7@~Vz8HOXPftI9w74SC zFl|4L4U|;z(C_c0N?5(WqdZ(4BCd>trwLaSO~=3T@bDM|`f>oIZi9hl;_bH)xA~BV zm=A8j$T}NViz>E}M!2+*y01D+N(%-N4JfWyUAz`taI@7RRXjA}Ap^=n7d}kFFsuU8 z5da=N=Hyp<{fo36t0kJGZ&yMk8YTgYjDLKi41;%s?!WF5uo?Q8`mV1H#<}9ude=pZLog@=j{)JKUP7tceb26X z#@`_CNP#&9>i8Uzc)4mmYh*qG=D~!|ma3uQ;|}K;vrOZLqwr7#5-FQI0~^Z$Vz*4- z1i3u=enzVPu~y|KU6)y#P+;KLcJp8@;fKQ#k>{R;&em!TolA*IA>ZY zA93Yxk6~aNszb!K@xgX2Qi&5`HWdihUF@3-?57x}VT!C2aFHM6Ws!*0eUL~sqam3j zj5tLN?{X+SJa6a>EPPBd5iBI#3fbnNl$|m%deF`_<0I-t4)eogD+)mUE=jN>cIhhuny7*LCg-W>skl2xB1{Gr>2}1;wS+TDz0*kfvfW*Kb6tqTb1F35y zicy5j)^jc}$?*#dOGZJFlv zw;AK^5^isCI8J;&aQh?i6uNoq79Z-2gG@$eXXn{Yq&-efP)o{Dsfs5~REat94z0f| znne_YpM)SN6CscYl2r#N{{i*P%9A%of;xuJm;ga{bd9^nDCZB&ylt1jnzT5y2VJ5OM)6#JhoTz5x#rq1!o3s?Thv*r$EKRBs91|L5$hwo= zb&$tr-wU2@>IOM28o?80ylHG}YD4bo@_k#@ra zJONc*eumy~E|kW(63@v|xDKTGH(y$SM1a22OU_w-76(m`|DvE24-0p>>VN^G@9vDmO1L=qc)Muz5$lBgUl<6nzYS`hBn;F6^-H<-$R~d?(GRam?oI$I$y& zRake(8S*84H!7-s*oE?ltZ=M+U5gKF41#iZ2SLTzk4t{I3vpHDVK{S-auS;$4qmKj z4g3<8D|){U4y@7=U^tIAyjghD8)Xs>B!#_r9*4M;6bF!-=&2pr0Ia#OManR-jAdXE`2!pBULBY%IriY3I<8 z$X>SN<#1JkzhQIxR`NX8%74%c1|Q%mJAxx&o}t>|!#6yH23Ia&Kg*%IvYovvkbixB zsO#=QYi1M#z;O{G<|NEr>Jq7=16{N4%_sIW)EEU)3b8uoJtd-6ia6>WJ zwP2fJn3V>`M?0M?ch?p{@K0#EOrJ#^=ocQI0@k9X0$W8Gx+1GXC7ZdnvSSsEJ89g~ zj*Z9C!b2o%J?c}cQ-eBcD7wy zr-s1Vc1%|tfU0rDF>((^@MV}Z$`R(Nvfx8N@&PBp1>hhB7VfWzTb@us0QzH)iFxSp zQhmV&uVdwaX$zP7PKRPLDX4A5g>U}_qet8#845C?fPm)A?DNR{-ys-v%B)F6w2;Us?ciynk^5Z@2%2 z^rOqK-DQ5(1f@>!Blg0aps=*QgaJ6U6r z$$$#CyS*slmNw>qqET55Jx%$C7QNky#*IfP>=M8vYhucG{tJ9B=M?!w+82aM*RvCT z*8wqTvoLY1h3qD@9l%jz0Zic^v0F(32bh$-waDgv{mm?Yc7DKE3=jv5qdM3(yctJ? z!q?4%9Ooano;=hqG9PdPvbvxhp_Z;E>DjWSOBD%_j*1$g1^=17Nh{&fVXtaj6^8I%h)IMR z^jfblTVyAZe-O#b$0BY_cq5kG)Ow66B$O?coq=Owk_n1lQu_GazaI%nKqWe;K|G4J zF5Q0_dMmrzcxm#8*z$Gtb8uwdB66CY7`}k{Oj%M=X{UjJQ>cI#GW}+I1YPb^03k5c zCW1S^9EEx=3pzi=_N_0LU{Vo!#Jax{WaNgp^H+w$kT7jZR79jFKznpdOlyS`=0j2; zJ9y%!k)%eghtR;lBh}A)v$zr(n#I-#Z5D^SHzB^E+^cJkTsTOM*xP^QLb6E>@EU}r z0)TdP4DL|`))v@0H)vPvLy^K+-Y9hL20E8_Q3*L`;XE2_)k;Mw4>nR1dMHvp0c4s6 zt9#y~?l!k`EavJYU>AUwCIhCV3^ZVG%Dm~Y>LFSi(jHl#;k z2+6)<-+(j5Si?kkf)0nDGVw1tm+Co%^Ule|l?1W{!VbMrr&M6%Orn$`pBS+mC5Y6- zYyFXliQU;r@V@)gBy#}TIdGM)P{*eLPXylU1R#V4kP4;HIIwmiDImZOq4c41IG?S$q47;2U{FJ3IPUu9TqDNM#Bjv$P(~k$D}Y{6i?(}vDQg@K1_8v zfBEGhk``w9j_?er@=+q2fjey`diAvg3>rhhrF{H&@pd=ufE{=N=*?tH)*Tn?&OyQMmT~u(@s2 zvMA)i?t`sT7Os2#;o*9LW`&sBX40G-iut?z_!*9~58ebgqxUFK1nnPipWd z<`+uc$W828(e1$A8}4QP4RU8<3Duz!XAP7bOIL62Ly2!--WspUUkC_k8Y9@&tY04s zOx75iTTc@=mKnOd2@HqUQS!-1Ceb3e;S?lt?WWJT%m`^jRl;dxW#xmtr%?5r##M8L z*77@7;LhYSGr*P`wBPa}aE=U&@*(&dpm}M05`M9!`mVIo0$3*mG{0!T8JC}t%HGv+ z>FgF%8Tcww6R$pwnwu9g8IsJj+aV@3z{&n&g?Zt)n%22@m@-(IjfL9>zOk#echWM=L<`tDl7u3~Sr-at{d&J{GLOc# z({qcICIM3*y7Ftk^kM~4p;r=>>512x&MZ zoH`2trJ!K#TGLddpITKV-Rf;IK=kb$9hq2OmrrMl=r;o3gk`%NmM%V0XhrBIj^ys_ z6vI6=vDBKxeNE@9^>uOTUGu)8IGI)82ghS%W~mSlL*{B9X8?tfLw|ID=$WS+nJ^O4 z?80Q|>tW8*#^7#vp{eSh#ZA2i>;VGk$#7{MU_Y_`pWVj$8;*guqK9nCZ}~9r*?oil z7)-VaQ#{?6;v9_}6e5IIXLZoz9S;85PPH{CHnx8HbZDDcZ>Cd{>dm0AN;eD^V3R(e zp_}sb7kMS=73+d~p;JzV9ne5{?-6S)_%c#SR75Nb;H{Y$bO+g+G9)r2YQqiov|!Qa zhj1THfoj#i)lgeI1U20_2A9Ty8FBa!c!7bX0<~K|1`joW|M<1PqG5A-TAJ^@dl6vL z<>;_}egq)>b}Puk=%^?-Wm*z;9uBmk!0j?oY{7Q;K7@D_A_yhAR}%iDrr!HFyuJ4Q z8iahL{W_Sufy+>j=udcWLb*fLR8dpY1hJ0*8u-PK=Hqn~v7yXOHy875-+q)V0OV0b z(uj5W`j=ero$+v-(GI^la(CApriLHI;7N7NAxXN3F&dz!Ltf;e-*>auA+Q|~y!YTY zp?b*AJHX)^x!rjtzI$WD=c35uw;LCWl?RTO1|`~85$!8&QsabbkuoVGGD)S%LxsxS z-0RyKveHSBg^3YdPz^BB;PP+N_v&|GzN*vluM#%sGtl%t3%>w`OyW3GI6Kh_$}Eml zM(~PYrj~6{hAtA^huSV7FVvk<4r8y-9mylU&o+}<{+WlZmd3PW>OXLogNIO{~_DQNs)O$w;#x;E6N4`8*$SGo& zkT}he!Fa~ltvBvD;|h};&A5q0j05W4Gx6_}N4Hm~seg#d8(P8VAf?{)*{{GNmakDt zPt0xz-q)IFJd?$3w;Roxz(qcXm&`ngdt39(*qqxBY6zcTAH)7bjteg-u_}2wofrHPjpA)Y^(ZxW^P(( zO2*8sc-rbw)rRKvjgh;Pm@V;-OJ4HIv*tJQ(1i zQtYc${t?=k;K0q@o|s#HFy4UM9;W{6F zrg-16?<11qR`pir-4c%r!NC;F+!`=iHL*UXLjTA1KP(BzOH(aa05DAg5YY&Yf=!d$ z*1o79NG7{y4~>+rkh@})J_LbmiaEMCo}1=*{o9?uh|r^87Z1a zcoO$}b-0WkVY|8P+9H8;5IdnPCoU&FCF5ZtCm~9pF|cFIud1Li6alsW@TaQ~eZWtl2Ua7x}`FV&D=Yzrpb{JlzxuU8z1?cbH3AH)m9PwHr3_L_? z`7urmMygiR>5cjjS9N{T)>1O)t*M)8Y|Irfby90?nL#y63J0W(ruZxlurLE!#~dlx zZw2`ep?1+oz#t_8$=5M~H4yy-D)27m|K#eBnASU9UlWWF+Kly7F$-zXsx3~lx`~OM zz0m&3%{u!|<_`{7Xs9NwyD+3)F~hR%ad=)gu2^o$aY0|e^h-sa1$>eJ+~Ae`dq{36 zuf<6WxKe}Q;vN!G=&#IXh(A6l7*K7nE+-Cd+@aoNU|*(UP%EZt`7zh@$IuPj<+-LU zBUzRiVO()lV)h2T&2_o461C--PGnQ&P}$}FuJ}Fpr7H!Xx#a1%KwRdI5U>#D1VQ#5 zUVY8FbumOZjQJq1$O6DNHvoqxnCQD<3xGm!snp!(ZpeViifP0cE)>2AP!d1{+zjrm z5n3G(x3Q=d*vhzt%9#1@(qv{|$CXFexMC2}E6=6!{`T8JqUS@Fj!Z`klc7kGg&`^o zVm1#vb|;Ec_~u-Cy-(i*vjWM@MeaoCqRCAF#2^lVJplr!X;foerSFda{`)n!FC{*G zDvMV+fogz_8equ05wdFJ=gQdl&@@5BV36AM;kVRDCQiLpj{%9_!}=U`hJpWA>dygU zsymN4{FhL1>!V<}l(EHLKF!qU{NiFP z*P48#D9mX><0Oy_qBtYCgWlXo0O;5IQNsGOVCa$#-Cn6<{RIJ7bLrBh)3}NCc$_Ye zf42H?#Zpunktz>6uo$M!BTclXCsTY^uHPez{H+CDf$sja8G*t3JO-gc&fpIsD%QOY>BT1{wb9>g3eI133#MRGFz^Ic5-~VkX z%6S+Ek#uO9sW%@FSq`S7$>YsdP8JeW0bx`wb5+C#k~2X$u{%^IzNUVkhxOAI!xj~1w4Q@O$KR2t;sqDAc*`R%&N}14mkCEg^c)SppOQN9kQpR?& zSYbd1v5E%HqTl77JQJjLnz>fd4XJsiA=6oiU$k3vkzhZLGjwPrGq` zgF$l!OynXEcv7q}h&g`*mG*k-_8mLQ)Uwb}xUC$0;vhIuHIt6gmo8hDX4U|)(YD#n zo|u1W*Aj~VyAp0YY9T1|kS(U37WjZ}NH_%G{=Ps7ly;g{iM3EKt4EI>%8A7>U6;-y zJA`Hq#B@?3pjymmdr5SES@2QgN9Q&aIe{4di|fLj?;z)O*4TipO4PZCC3cj4*Uio9 zwZBN}+H5iaZWMRr1Jpyh4cJAYa|=-aTZ2~F_F-nIcpv=)bXrNUSgS%q)k`uh7>6eP zahcXF&wxEiaVk7!nd_eXLC72s`qNYn`(3I&0tEUFBds z@mi2M`BZ~bDn{+HbEwoh)iUun5As9=c{n>`$PRFcDxC5T)w^t*o1QxaE6ek(1XK6} z?!ja&)o-D3PyKhj!l6bK?+zzt5kKMj>8~?|!V#j-7{Ebs2(*a)sZuM>Kz<@zYJ@zB z9);K zX@{4n2rT(o@!6BuA4+J7d~%VWDY2ZHv3EF^kU<8nZ(sc8e*Kp$3Os|+jI4i4z$Z|| zC-8*-Br~sONp7z|r=w)Abf9D}>@fKuc~abb?Y#_FB>Mh4G64OxTb6OTd3y&?2th@1 zFcb=YzP@a^o`akQby=zHixvBh)3eOmH-0*;aIU%;LLKzP#erQZ@p8e3JI7py+*FEM zkH9LY9fP}^w3?BzL4kp2a@v*Mngo1}AYb$-ysI%3=^bX*?VTR2=4qTkhDc;&ff}jN zIAe=s1gSaQg1p5kY6)s5u?p*9$b4h=uAgx_;1NW3$ z8P$Vl*rt=VW%^#q-uF=v3N676MSAt)Px1Y@$flGAYemI(ChIt(+4;u}7_0;NraY z`SNXh=j9iPj5>OdH^M3=&1Yd(N2sLKCi%7~47$Kp9Dygy?y+dq96yyI^vw|}3}~F2 zS+{NeVrSj38yijkx`5^L4^7bUce8$UrqaGQRNc^NA0zF@ac$=NE0JM(f5cTD&nyID zbEVlm3Q-#qV2{Y5KMGow%V_xI$8HYm+*LC#PjGO`N7XR#UIcFZvKz^`&T%32sA0!F z-Hq2n81he=$1i!@exB-GuRXJ@snBOwF=r~zf|r?kUs<8zjqyihIm!SBd{M$8)j9+L zsP(I1-)1X5UZu(0cX{jX+HRQU=ib3eN-QlbIy@4#k72Etb1weRae^)WdgaSrZu}kX zKfnAP4%63xr0YuPR2w7mA_&1NASpuS#$)gN2FI;u3Xv(vlyNzQ5k{zJZH|^U-(&eL zmiP`T##hmiRTlI+PJFCGIO8D$(_oJ5m7G5)K^;k6XCxfC8mr2OGUT)73s)sIaSASP z(I|V2FfFV^+7u>9z~j}#as)Jjc$ zTjgTxt1^U~5?!Mzsdpcu+gKGn3r}me?R*`x@z%dCm$Q5y#tm zZ!vW#Ee3rlS3|P0WtoTNC`0yth_Aaj6C$Ac(SguwKYfElUpBhA*u{m}S?oeejE$89(<*sQJze2SU|uLKbhynH%Zs#~WgSj_71Vtwe+_|7D*)4p_#DxBSFhR;Xd z2gS_jN0btuN-fdovNoafI)Lu;^ovldE~>PEjPQe1?nP+OIu4+aK8=FiJ;@POj?a03 z{Nq{*MfF#A#&w(ul`t@C$q=I2;x$@ufGqS4X8~ewLG6Js@QdDXOiWBL#T0SmX&NCy zKx(v-=4lISzPo>G0SHomQYo_gLyW=s^ZVTz)#q1T*zyNU@7lDx;1T8lBw^568X*bH z9x9&i$nOAnmIP_0KTNw*i?n=w(k@#ikMl6{tgW0^WbJm(szpQr^RJ1BmW0X8>L}|@54G0XB8h*JN8dj-RoQ}Iaz4BKVkl1KAWm=1gRn4jCr$Hf^;y$GfQZ*!XL_1rD~my5f`TGqvqaiPsRN#wgr0gkc{c%{h=; zO6}l3h)@)c2qkjH(Yj?)K5vWfW10Os^J&cH{#@Q)df&UL2p(A?sY@0#tQ_Jz9^$Kb z*E8EOINq=Yi*GQrZy0oD?yIPrFM=z{G0XsG{|HqiuCnNmpd&g{jELTWng-40stdD$b#RE^LL;xdb7~5T3UqkBMkwX89bw>rxk52GStCYy$am0UKUA*zj5s z%6PrNKjwG2@xvpe8Xe+hc!zWV(&!pvUc`Xbjt7u`8(^lOeQE~qhS$Js6OlsLR*N;G zL+u55ihoFmcHi=gE@dd8F5OLi4DJ~`Rbkl)Ik_~T`K=&8Ptw8jG=rx#Au@mD`+*b? zjgwdX%ivXF2aqZVB0iBbZ!l5x)CB6=HF8={&Rj!hAg3G#l4W37J9Y=7vkIt3o#mUU zu9OZOgBkLuRDed3;G$UoM$-va+hMlYN!K^!b917GK53Sq3I|jgcuP$@aDtH~&!GO7 z&%;d^4oe1T;zn-;6xQF4J+1u$82i1Ttu0z$Tl*1s4^QdF*!kPryrBkMmFKd=@!HUoI*=BK92yfX6>t@8qXPom_E$;1I#baQxiCpV0#-@ooa1gYmrv@p(S`o| zbJg7$;<*LQ^3(_Hp2i!LMuWAtCcoh3h|t~yl$wH8%}mCO+=&wmlyNUc^7_s^2*k(X zA(tB+{vniF)7hf=IY%eVU7rSl`VfkQ)D!v#&yqlH12bOI*-;|RL>DOv{fD6Uk8Kr> z=-OFny{lJ!9*!eG9-j&q4=%bBc6@Bc$TRYh{l#R#x^>mIz23z$x9Gmx1&N{^PA21^ zjF%LeX)HSy(vw+Jxy)ew=_CECR8R7bKX)Q3s-Ni5jSsoV4gU5e9CZjWh#RabSgp{( z204Wi0*ETYbB|T-H@iF0&=%Ll>#nb&LbS)EXRQx!akIVwjqN}n&>bNncYo2RvhpcT z4%ah&0mF_O@fWA=`qB}iFc?@Kjz)C^Jio)8Ao_5_1q0)3-?L{pqh)R^XD2^T*KH@- z<6n8vcT0ydze-qYkS%5*8fCae6!sHII*|YX7p<)NW;c?IXtzfKUW$sL@aT46Wi}J6 z=t^rjAQ4{_8*tv>gD-T&&);w!(+D#S4bfY~5xqJ|=(4D{j&A9YL0m!4jv!VIx8CH6 zYd3-d@L5UEY~Fji{B^H%ft&m_w2HWb%vPG>t!t{jb3g575PpS2Z{eyR1LR2nRwBoz z6Tvd>UcWcP1lC7NI{@NQ1snncKDFbpE+yD5Hm*iAdkDKP;hBNvB@U{7h#1weQHHoEjLk0(N5t=H;t|0MSZk(Uym3|TGUE+(O_L9fMAY1SF0vfKS$Jo7e?C4mbgI(4>vvR9%^R@HYbyaPiMFNvG)y(6VCy zty=1aml3@1GD6+=g*pZ_-BI0^30f0!smBCU#_V96XT`h5b+r4_=cw1Kk)cKZj6+oH zIh&}Aqf|A%NJKM4ZP|jn?X(yBa&yo&o*;%RvO=V{0)Y}8r~GW|7g9Jl%7o*Px1V?r zfvZWHuhbwytmtVt3`X%X;;b=vV5|K0Ma>osk3CJA5;u$t1J%wR<(>Rhfng7#X&rx`}PLr!&f&y39L5}`QKU0CXx%FXp&ZXFeV?(F-wJlC#ifDjW2hXjFc`L8a zEv$wgzB|P}v9Ay$cLY>&vi9&LV*g}=$w(s}a>)fIRM>+*iv4qaS)?c#EdYMw$ZX>f z`}ZSEFvbvHZFWS7Ov(^qqk`5(#+{$HiQ=CIhK6gk?4U7@*U8V)-W@=URIuYv>v4ev z8)Fp@frIp=5IP-&=_}+cHrO!5_?ZscY^U;LBfv2mr5rMnb3be(jcMHci7KrsXV!vWBwhji*MEVLV* zWNWTRAy$l7EYrtA$9z@uJw-Zdj&IxMP)zKlPN0}}Y#=p5{<~Y73S?Gc7ewUvFq?}C zvk7fylIXMu41{pH13>gH2sNszpffuI9pkc{+@#|ks*mT;|6V|im4$i@1EYfrEPHzS z@l*ol+6*v+s1qR6UZZfi2>4-pIq5++G$fT0JPxr#JlIz>KT|xPj_5cekbV8C-&yAn zl>cd<{aZmXn9)C~7f<_jkBme|nR#s%KSzXujfol!lsC}nve4U}<}%CFTf1qKDg7dH zUPHsZ5Ci4|A)Ea`EM1xqO&!7V6&mB9$p92BvV>W1V*WQ>EUZnY*sb9IED@QN*U9zW>AQOqsTIxper{hev0tQm*xB^shkcYz$|EW zHUZ$;XNGNmqDjjlFz^ke_b2JKJT9R?!-6QmfPHh@&0E3a(^kJ)_TkZ6Tj1q;se2*& z5E;Fit0}67g8gjdm)@Qp4HPIzn2%*>NLqDK{UM`_?8bsAQo$(4;yah~+trGlof1?N z{JTf^D$4gx4Wo>5$PR`h7c~tji^FIb_|AQ&(072dh4a5oP7kf{)HIy-qoPAo<4`f` z8g)W~AVl2@3kVBMbi5}*6mE-(SwsZihfnjq+L_#x37V4DkI}kU15rXy)6jQV8tjkG zdR&GlsA;Y=YowjOo9#hTa^OWbCsuzvUw-vkOMbENrT7CAB|y2Z`5cI_dMAH8Vqj@j z=l3EC91Ei+dEJAD|bc)bYm}1p#)2CIx+$Jk)={SqHdum_GXhP9I1p83J%G1fXaKKkYK!Al^59Mz`N{(QXEK6sZo{K<=QyrCSfB9mL2$Q9T zA#_28sYZllaKrFv?58w8IHC)biAH;F(^K8B35R@&ei;UN7H!wa@+ObxciD~$cVdxR z#NtFFarWPP@pS}%A_8vGiGCGvgrA>3;k7MxEBa-y&P-xXge@ZhIe#oZyaRSXd9G$` zP=Zv1Fx5Y2_Ty4fPDxi>_ZeAMwwKO8pD0xc$r@K#z%l_m`#dMgI*%J`5_? zYm$5A{XXxWI6;ZH#d^>0f6pOX!s(SNYn*Jbq|EI8X78Kv2Xyte*?9lF($D^)uS|JE zl^iGAJcmOzmYt!y-XZ1&m}_iK#M>mZ94r`B7`m_kP5J_HP&5h#uEi%Vu0bb$fe73R zDAL17CXPe_%xx;elC7n_?l7XKh~J|}kx3$3&A30VUKHx9zCY`JjdN-XOft%bdt_2$ zjqKkC*gSLcJJPXypfx)MDV7d73&AN)^Nk_vn z&ra+V!A0;QAsxwdQG^)y=k(<wVvrcCSG_qk8u_7p4{`6+pa^EVt7#g{ym z$XV~=-*3L$@W9&mGbxtu3W{#Y8<&Yr`OHD5zpY$kJK4IT>b)!Zn6Ho1y|zg4QL%3u z$90jI$ieZ0#*NNVNTFPj#{W=&S28Z z6Vv3}$Fym1D2YJnwwIIBs#S0$RSKeuCJeM&*eS_QLN+Nwf^M!|x9$QuqW6lVgQ>6B zo!9r97D7;G_m1t`gDCJR+b5C^bxJ-!nk2+a|A2rChK7(J?V&co!E(qJS7|S`!=|bV ztJ;t*0J>?fd7BY#gKQ8zt-u)dcbp2#fFa`3futu829mEN z$X`iJc5Fa~Xa<+x;X!^S`&!gC9zTW;6BG)`5$NbQRR>tVLYNPO4xNiSdaTH(tUk)# z9cDJjNYwIe&3w+|F3bkq9t_zrGQ_qv^X$MtNEQPrTIhu%26ceSfRG|v&w_PdWkrQB zl^6~j99I&p4v=NF>uuPtx@G3v?+OD?sawLXbS*`G9>(e@Y_)t7@dfe%A!ny=RCYa^ zm^o9r6L7_njoIQ{-Z!lZ#YUyPmQ%Ew)noMM)7Ce%K{LC(92QJQfC`>Ke^`pV<|Mrk zyE44yn7m%`!h0*SG0({7JhY}_A{QoM6V|!V26T|FISV1M2 zjxmXxff&J#1CKsFazGrD5|1LqAuf7|M{k|1QPEpVaCKsOR_d1`jMZ7|{g5I{|^gXeurs~m$S z*9Zl(1VRte*%<2@@ng_~3HbVhA8pqwg7f77s;l9w4SKBE_=Mzopvk)DTrNLE{&9x+ zD{TwK7(`l2j^(2{e0rRk8bz#bvV-VC!9UDg9Wn3&GLwxK;<+^vh5ob1`zIyMt%bKN zA9rwUR8{W>vfN>*jYM~|->IDB6opb{1F^@sI5H415=5Bt7uOv(TLC#Rm=PD!q8RW*+ozAPjTu~eV!#L;V?r{j+tKb*AR!Uk}9 zUMtPJNDwUV#xs!Yh|jT4PWe_EBKJ*3wD-5CHIu4=Xh=nwC+SY^oz`G7r(+JwHrG$RBo(a#PP$+ z@|+|AzaAttrOK+t1vGzqDI^*Ia^P%Jad5m0=b1csO%JePr=JyL6u3h7TOP!w(trks z%h*3}&8`RUOpOk`sAs7h@;?vS z^M8DPrT@2||9@W!r~3cqTKNy>%KfhGKbMNbHQoU9mIU_Kj2HN}>=FhvWU~|5#VZ^z zfMp^5V?VuuVd2uMlbbt;MUQ)684=R~FFHYM-NU{CzrH5zv6XeZ9QFQpKi;t=&|BRnI9>3Ic ztvOXy726MxBfuCA_b~*uFsL@DJexQ zTKtfU7+Uhtoo1qN3NkY2&2hSgK{!E2d;&(!m;azu=#YsXy7jC*=({Jf3cTPk7zWF7 zW`istE!-vb#nS@`2W5s(EF`i$3dpf+q`qond2}!?A^>KA|lfA4y5oC$Y5jfA*E%kbG3n{`0OtD^jz4BY)cD|*a8y% zVudxc{ne7I49I~Gkp4KJE8*cFghSQ;w%+03I74K#6fE?-Mzq8LG;orUh z_)WjnWX-Am!hV|%%>Mhk1Bk`^-GhLMzCL7o)~;sZYhHfSX1OC<-bPz?TcPDxV)nzn z_6)<5K?KwfeG9W;1tcuv`JJ;0BqKvsPpLg$4)+P6iu-u)uMfXf?Du=Vc-8TALwo0rRAPTY$B;0; z{e3h>wDo<5Q)@+fB?zufKW_-Imgc+QLBRecz8wp9k*qJEy<^Zr`%}m>u{GbdI{eqc zame<(WKSO8@a+T7LB=AqncHO?ipxOmyN#L$T^QO?MtF}Y=MvyM@9p*F4~g%LY%XzG zM+e59ma{4n*s1&|s0TzV?yD$xjIuww!UB6Fdly65laWs!k@Vm@3xrZL-SA|_i&zGh znoK{^!MkL$?oVEY+=yR5};3iX7)9w}q`n&UgMuT;LJ$Um`AJ z*L%8J3Ged_?3PsJ~u5EY?2_Tz;I&HV2u z=~s$Ef`KAaS&92ZnE1QZe%8*}2JLfY_uMAx|eyB>WP9T=ZmZ zrPc#tPe${e!-)4hh>R3MhzU#XCI>RVl8cUb97UNo zR>)ov@bRK?bV{k_+%XdbFoq6UN?DvQ?4K|ug3a%fy6A~y=^{Rh(iuCF+WC|t^)4dq6HvYO7Seqf>b~dg78rZ z4MmAVN=GD}w_bOEfh0W_-zAtKR z_^#F|ntgT}Qv^?j@-@b-o|gVlb$|PbPbZ3|CX1twdj2+=k#~Ju)WkQ#!2P}L?fL!h z)Y2b|8hTv##`vB~<%iQaK_165X3q?4e~?pY9s0epS6$UH(P>&#OL2}V&UFzV)H733^ z_J?y1|1#pDt%bUhLWL~ma>g9+846Wh$3``Bj7&j7*6~Q*3jA;N(s0wrxQ$T!th-@Pcb)hCyK>)W4TY~~?ox;Fx z;uTa34Ie{9A^-t&Vq)S!CTi6~WL5;Z6H(BbLIexP?qp|l^pjTpCNzHAzzdEz=fIXt z_o*4VyNn(PAKAF)>8QlO$>6ADooH_7PbV15OXp^lhB|sisWzPDMNYtZ@3+c~uW|M@ zzM|r5mB?!;q3CZPccSOJi2dwZiM)_pKiMi!5fZy&z{n?v+>7|!6Esk|xwf*>rC~}-+V7RS_ zdmuTh@B{zo#F}7BX>~V*$tViH!o+nBSy5Otj}0UsE{8QAbD54CtC3W?RxD)oz9%3$ zNlWTf>}H{d@5kq6^x}@L*tu72`m=ujYa!!Tzt*na;4-?YpP3@XbQ-?N$cO`G5LPZ0 z7gx{9mRHx~GErD8>8!m`Qf;G5$EYS;0mr{Mju~BIu7R_6eQvMZDrw#%jc&)#?9K__ z)^eW4U2HA5nFWq*&)BE}kk1`PdwgC}2E%4qM!TQ&A`7eRdbBn6$SvWMx|f znCJX%@|q@hLO|P_-g`H5U#EcQrX4G`2-q;UJB|CzTm5)U`kT!5ab`4sitk{dy2JaQ zYkhP?gs%qtt}(gQg;ks}HR=~Yo4K~;>a0J*c6Pk+OxJLUo`*tZYp2Aun(}C4_h%W( z5mg(0lcPsR{aJOIJSs-J#PwpBrVC`tmlUAJ<0RI5bD_gQ#6o* z>;kj|z_G_}_Dc^;^E0tQw?GSE26aYBlZXhJIfC&{Whki60>?HqWCPqVgAEJ>dHlKH z7BJ0MlsD)QBJt$Gdzem516h>zG6!vo8b0Si)$R1{0JL_n zEF2WwF7)tJRUu_WTHOSl!LlCyty?2sNq=LuIAY}8%De+Y!s%J!wkNVI!V?v^YAwUA9L&1leX;Jh+S*XbaI^12B^@Vx zI@iKH_IzW4V^d|dA6V@~#OT^>$10?!k58nyl%La=GB$16pOSx_B_LR<;c?%5Mq%Kw z(fpq^{yNs4F|6G7u#6?k4=@X+9*@qh)oC+-lilgiLj7`Cn1lOdBMl~?~S(%u8A$@FXcWpvb0M;%3M z2&nWv6ltMYfdJAw0xC^<4^jelM@5h>NCHR~0coKJ8z40jIsqb5LJJ6?m+*~X=dji|3W&*5?q}b7U)S$?$D*_D(Wk@R`Dk0omd6Om#OeZl*ZZ#gd;)t`KBxRQ zMNaFdHOFw#e#yR2MucdKU9sFj(Ka*v0FIB5UsVo^a-AO* zGbKUHrc=lFjg9G|wbk(6J+qbA^$(QMt;BeL8P_fmoxXQ>TASKTPU~&EG+|!d35tsC zZr=aHc$F88Oi1B*hk$|+^i>;_*I5YI722s{o*}@Xf6fEbfOVxAC@Op!c;m95qz)K~ zPy<>N`=4F91Y}2bCcBSBbxZONllDlaZJl+xwDf{QL4BZ7Q@rX_Ji5{^(8@9aCt5xK z!~u8tsbc;>3(f1YOooo~+y+c}hhW705whcoeD{F5n&H&-a342&oDU&rvircMDYx^;~w+J^qWkmT@D~9*$OlvPsJ zqm_KF4?n8SC8avqu9ko@(a?Y>xd<f@$;`lOE+;?W$f6?!1BK3xV zp4|HLs3oq)8xQ&p+|9MNUf)-euRxDu-tf^M)Fz>c@JPtb@gNwS>i>IFGujXOiB}wV zx!HKNSz?mn+17eTy(W;z4ZzVPt8rlsw*WJ-k!O9Vlwvtf1zilHKtp&e`%lUx!_ef{ zei|UWk#QnevIEUwa0wEWvoMUB4X$CXIp=~=9AM4G@Z`vVhYC!wGCsWkmm+VrDgMa` zN!!1`{o(_m9%#gh^Q1Q3V#MMXehLfAt6_M~0BuWjL5+n-=9#$F=Fa>GvrP-oDnA~V zU`ZB;(_9UQy!hMwyA6@QXc=K?^pg21zzQ17v@{Q(Db5_J7C zxq?^TTO84bTlZ2uh{~j4ncjC&4jFFF$HTA{nbze%-{c^BCYQX|C4?dc6Fr0!RZkhE z*8f?zOPBN4fG4IzB34P~DHOb?NjchVG=;;n8fm z-{i=utRQ-A^@vrZ!#49QSBaAl&h6!umb4Z8h27$P4VQ>%*wE)kQ5ZSL$c{W5SklOm zy!d0mO!nqOF-BaG8>R5L6z{2u=IL2m7aRc>6as++If4wzAuy=lw0?=!cV)0M8Wwk1Q1|XNzU|3_cL3Z%LbXYI*O;) zJM(QjUtb|xkwKCYCdXLsxSD~vECB|I_i`5)Cw9}ZR5dK0xJSk7GslvJJT#f3yge=;0< zY}b1r_}wh+_j(G50KPZ%{gr<1Unnb2r4kX>$6Le=Mu4?GnII+gZ&@LWp(32c5=h(m zxV|0(YN#gAO^j>?fnlDn0Y=_8K*(MMLsE07Mysc&z^jXmjWu?uaj%+t2()_&j~NWl zT_9}N-X4)aAfyK9f`MiZmKGN<i~qT5|F4;psLM<#qB{D>rHl+m;*Ij*>WH}TV%{ivTA7U^-bgq1^tFI zJT-=G4p)Z@wj85|LYdLFgQ4W)7#Az5WHZ&=T;xdaYjEn0#V+HDuv+nFyvuE0$_56v zHZg)SJ1YI=e037PpUih`FLE?9!xwkuZf35UKgo-W;hpNy>#8cBUY{l9$p#d^(L8E~ zAr$#G+aA68wYQW)U&R*&`t|zL8i*?&LbN6(@btc7!IPO$HUu|%uM9W0NBR2e%#15a z6d*JzigJHs4A{Mt!6yM`gK(>0dgzgzQs9xnjIZBpUv88!=3Cvm-^BBaqAUoWskHTh zwMDzxDsGg&{?hwhg%!R^Q`3E;y?m$NGrYB1dpAX{3RF%Pew}RnuPUV#hrh+6v#zNf zdnHkTUAezq3^&u=?KPj~fZHps__B+T%TNFG_}ggg%Rm`XvDPTUjR%=Z(oQ3*{&e%+ z!Rp#3iIb}yp%bTKIEcnLo92qGJ^t7R@hNoysvOV*zd50Zmv-n5LN;kH*y3(Nn{zn>?tnh<%DKW# z1dygw0o7f}ul!+n0@@9GPyv-)V6EE@dn7i^wuVR|`7TH1qYo1j8WrKYeM8;rH1mlFeFF|ZgAjhMl+La4=C!&xxU|KW^O)I40~H5BOLZ* z4j&q`^c>plTOzSc|GDCg$Gkh@a42lP-?#fN)25_PF%mY4TS8|y zsX?Q`0j3nS1ik-+Yy%}~HQO@?ud($T7&Rk}MuIDAx=DOHmz0#j(#o(y_$p0h7e3nT zExzB4^wDd+v}RVBG=e`a)td3__^^BzY^s#8id1WS2$5zA53?;(CIPLj92hESU|S#N zKY2#Q6_(HCbS~^jJP#ZDRD86oYXWUZ*>8Z?qMR&sTs)+3#6ZWt51jD$#XZ`Fdkkxc zeW2}ay%Bne;%6>9F;P3L9NgcYkyqU%b?3F26ltkG3@BWehm~)AVJ+p!(Yv_BTrc#a zE^2W`DQ-@FzuucD@34H<<{^L0sxRkJ{>pEAbgUdmOP{(+^BqvuNU8m+Q)T2dSyRb% ztjof#Isk`TI6_w*N!yI$3%T4>CB1nHo(#Tkz_qz-lu6rfJ$hU~m4B4(j(lWLii}rF^rzFuZl^nmGx;hvHc-dCC43u zhm0~bo(P*`W|tH(w-%kYreYqIQA*>Oo9+|eo;JDn56M}{*4do>P1_yZJA z$ob4i#xkG*UE{m|Ubjt-+y4y$^n&sqL6FjJz1(mPa&mI|QosFn;h#X2Q-baaVihdt zPM?8DAf%NA9+%X^9Jim?gQpPbMj_?`2uOk2a|*b+-J+%aub@tdEyK~4dpCm9UU|S< zS63I1&JasD(k!QBs2z52T$wLgg7^u!!Y{0HvSt0=_;I-#qyqNPa(Z`X-Z!bD*j#$s zg_}!shSu1f;*gq-%2KeOwS|3(-_Ma|z47W>Er;m)SXS(ImfQ31{|74o4Bn9G6cRNo zR`zupLfL|sZvg-K{_Qr1;sJr2Be*OO_7389LVO9({4@gNO9`S6q7p4-`#tU<*fT&g zB3AJSVGytvfDH5y)A%AlNCZIn1qzi&McIo;U=cC`L(-Zdm?jUVt$v=3R0(+6q(hF) z&G9cO$RMf{M3=72)d6W(SK2}AgSgT;lmZN4OI(Qn>tOjP(^ZD(o*!15mG46c<&!gD z{4~5;wkJa^veXVZ2aAtXHd1seYKAk@(|3q$0nNw^_D7w70RlhCmcwl8aO&%st?(ND z-HrC9hY$Di{1SC2D>(O+>A}rC#e{R4LU+2(+&y*kvaue<@YJ@uBTe(deO--5^;ni^kYN$#;X95^Hf59wYa00;ynM}%!gjsGeoGs}8&(&VROFnHzk7s2hfHEci=6PX59 z_;EN455Tozoe!PlDY$6E3~#asWdnK(mQamI#0CXJB>lO$Ik=R*K-U&he(yXFw~U$H z#Ks`2=^EHcJHd$nTUmh5UP0K)u;3!$*_+g@O>14>7odg%Cl#_iLiROCG7ZS3KJ1d$ zo_&Uc(eX>zv1UM@bpmACUyzN}idAyewpw#?bG#ICy&zDx2Q}27O^)F@C1u#gf?x6$ zyZfP`)IT1E`yHsHTUk|fNQL_26qab`?>#y2(NY?xC@AHc(7gS?XAquA`t@Ib6euR} z_G6>UO0w2)9p=`OGImhceZh_ZQ<7X1Buyyx(=$A>EkJ;(O!u~pve*nheo zGOg}xm-M5$J{r8DA*9^wW1rD%6W*J0@6mzMiw6#H%^bg=EKcfzNJ&hVb*6+i{%VzS zVh8R0J-nPnX{=dgS5Zr>sN{0L&7+~&0gJI%3tJhN?^QLJT&+rsWXM_+jv%klw?BKj zSeY84vQP#!_C#Oj{>-4wMaibPxV)KdIO;jNzzZ8WG;h;EEv40Umlagz;JgpN#J=Sn zFF#2euzWT8v)uy({e5qM#ty3WkLr?8la4`m;7=&R&gK)>UW2}%BElBvS}qWLbR9I0 zF5q={<%x$KP&|!LWIDGt|A$Fz728OU>;6M@WM~Yq~ zZ;=ne6`<)^55uY^bxFtsmq0S|U_&Dr2}gtuKNPqH3D8)L2e9j5&Mnv~$pXNuw)H)1 zyaTx#62Vwu>O!1Xf&Qu)QzHRs%VldE1CrITGjS$yc^k@Q)Ut{AvaW*!a$#?feNi8eUnCcpWr5o8tmQDOpf& z^MT-aW708coNBrw4l| zO1=%gGlGR6MRbBX-X3@o*FZDi`0CZGJ()Klf+5QEsrE-KM5(q{`pq&jLY5c(LM;TA zSL!^H4j5um6xDbmUSIH1F<4xzO1g9=LY+r{;!wMXnyy^t5Jo}i`@I7i+-iNp>d36@ z;XVj|)dyryQWW=<_%n+$u9@=0S>}tx9nst|mH|={@n_s0$Ia+>BNdpbnPt z(TO5BWzl_{E+K=JCcv|4Y>hR}EnMIFc9dMbtf8aqXd~~VUNL$kFcjMK6~5^MmFZ(G z^tqZ%1dV8^|yc&Q5+8DmHa1 zDoJ&vq$QliaeT~vHR{o=`Dgp}K#I&4`Ndd=x2vz5Jj>I-9Gn9;Nd)B92t@<(;wIRq z_l%JMQur%k7J-#a4=(<_-9UftMAj)7sUckhv_9y15GA8kbpVVytbkq(q|e%nXU_d) z1@N4=K6Xz+6(&fA5V{T$!@c2DkWV3kTCn;BKnYsn&#;GoO$$^s2%88=MnhP?M=gCK zh^u4lu+uU|_HcmBI~mtv!ig9Mk(qe@x(LXn;gS=56ZdMg3|It^shSPy*qcDH{_%4` zbq%V}wW&Pg^OAte)k70VZOYgF%Qo(%UM& z*>(mAuLa=>J~eRoTE>tv%)UWF$%{s8Z8@-PWWxe$4xT1zRpO_~)?wIVe?d5!0E+;+ zWwL2}^(KdbAzb^B)g&qaSK-{u+~Q(kQ-c>C|B(G?^t6j0@8y88%t-MwxhsQ>L&f+YSN8G5fF`M)AheP2suP3f(Bn&mg2yhavF$Eq!U2H{ zP&kGrW!m$~hcuFH5DD^w)J}N%)%*#KLBSw*Fm*u6?C>+$P>BqW!!N<_^Q)1JwSP0@ z;UJKiS>m0>HfSBe8VkJ)Fo9YJ6_iiD&Uxa>>cr%os<9mi9F~S@UIQ2lpdTTHv@RWi z`&Y1x9UXP&DospGWb|D*1#{N1NKLWFD-Mr;EINm>6_I?EpfHgM(ekT#ACeG~di}Dg z(dr=8q_-a-L_n!#1_n3X`m=T3IyfAT?pJwkxsG>=L{V@b?J4)pjIhmvhUsm8`Ny3& zHPAs%fP-V`ucXWV>!^$@-I=*(1I*TL2`IP7`IMxcLA^>VM?P95BQmF$iC9iXBJAxitc_8AN1xYGt~jaX@`?xO;^=V-+u^Or{B z>PjWyRr^>$#G7!t^DIc31b=#M!jXa%Rv#00^$N?dGFiC*(NL4!^s z#0yz~m&6g8MIbl9yt6?K)celZw;mgob3?B|XOd%%bol29)%Q=MZj8zPGW!h98zeX* zlyiz(ky2i?B10oS0@C(-u9`P*EQL#4g==fktb9FT5tkRo zPs8*W_XN;AX|SE~rdG!Y`wigM_Y3p0$|Q z{+)bWQ##lU8ej^66v`lu^7;Di7i6CWdOX4QDq-ZnBc605UkPqsJpgY!198yd4rcdN z?`J#+q~gJHRb(;LVjl#vaD(iRZomQ=nU+UWHT{kh6c8dsp*n#u1Rx31{|4BxSa*y_qI6t=>2Vf7RzA{)yhyj{?6_9}B+o zzFNPw05h3%Z|aVQO; z*P_QZb}D2-i9ekP&qPE5Ltor{#W8}=BN6N|;wR^s=qMkmd8*9P+|m+*Y$S1UYHbl{ zxPr`9Zs&r}2V4Y3V5{XtLp6#h+!2QcVlG;Poh&46blv9It~no5KO4M^f`H5m2)Y@1 zt0lMQZXj_i2#O81nonx47Q4(y!Y&9jTY68z!n)vGEJ7V>0eUtvV9`oKwt~@QxXXCZ z94HJh7mW+nJR)me)~tnxha)^;$cC7?VF!Ag62yIi_Bu&JJ_+|Bf~GdFy5%`^uMIK3 zz*(?jAkSVXNO;jm_qd1^bch~zy!{RXZ!aBI$sCvkoJZir5BGDt29NQ>p#Gn=ChUI^ zlTE{oJ_%I25_yeVgRkT6u(U5D<$y+~WxG9zkE2>wgU#hBtrY zsX=77@618=a4`8bbS*=Ljzk6kdqMV^6~dO;UN^~UR+OB4PDg1m8qp08fUs|EzDa!V z@b@J@ExrEX?SB;y*K>26AN`iO6_{>hMmgtS&k^Qr%|WKbmH zllyB&E9AQ1PQW}PJ0t`IAe3zPomB6|Ne`X`*Mq>245P7oJJI1PV!XU)Z<+=$`UvqV))lMvurz-2Pm&wz<r=0g3)0*h_bDwPcsQnB( zQz@%faAZ{4ZCSc)#@jtqI*@>y-01f+J>7|mVz6g%$h&e&IrL3bk(5l98!Y4#yQ1<* zs>$AyqB_eC`JeqB!v^6uu&xEbV*}2v7@7=Zi6=@Yy)~gx1ZNl#Y9jO(FdplIu+iuH z*YgP5Ad(|}L}hC=d=R8=ABK_7AZs{SbM|(_8kzGwr4RNrKJ^@aH$hg5_(YL0B*e~N ziR^$X3*kJ%ZmR-pc#A*=(ueLTT(t-t=37}PaXt&SfQX0|uEhyZVrHs_oy-Q^HqwBB zd!-ZR%6o0_;Li#J?gO$n-~SMihJhIl`Ae{HLAp^6m^Kl?7Q%u+=#^kYG65Fu&|fM@ zeGw|G%haBvjNzA~)O zYg}eB8wtQS;1 za!{0QS|F+k=msT>{skm7rX9AH2xOZ>CHN{V3>`?e0eE8bL+TILDkAn5vlK&Yhu;K(>L;kw3A{pv}0h;RJm3$ zr@DT!P|@hV%yXRRS$8q89T(9V^J$LlX%=ptFt(aHdy+;}>;utr*s*9qG@s~|x)<-j z%4o|Oa#gi(VldDSC?@g1;W#e+IS(c&_#pkUoctgzhx+}%|Fs3lWBG1NBHSS3Lm^v3iws1zhioSQz?HYhSewI1!43ESFG;}h3`0mlqu zx=2!GlgIme@_?9d6Km6BR!K>v@w zDe7IzCJC$5a=>R&T)f1`BI=hE8Nx)n(iCj$3YuT?v$6|&f7~bO-1Rvvqp>4bxV^fv zdFUgCvb82|K@6OYS*5$%5#0T(k}ePLIb4bowcu+n$08a5RS4G?9Cpc@A==JHhZzf^h7e6=LRElq^*e8e1)M>hOnJq-@ zM3&b3#HYGbXZvZyHxwN?$_}K~6Y|s0jLM(oC0o`V<4YI42p$JVM|~1LB8+F_5Gy^z zw(ag$Qdce+yNpi49+^;Q*}5tQnNe4ia=z_gXVEwf>~%3Ibx+b+ zoi=G;Y=6v;2WP{*4rom3e%O}-8|f_YeuM5}z(3V~ZJ5cC1h@<16y$&gEUizILsYy@ zQ`alioJDemP3(!xu-%KC*58!5vZgQihfPkc+TM6&dGw}q0|#n4D_YoOr?S1He^ZW7 z)=ko1AN5FVDO$PaXjm~jGM+IcWBmGuKId26$a|fn!g5<`VnRRPYJREu)0Ec7eaX!u zBRzr#Ah<;x0?t^3?m`MO5;Kn}AFFig6hb3;YkI@&NC&xfy?W;%r%iZAmQcH}y-FPcxt}z62{!?lxO?ri5LAMVqz6H>*1b%EfX*N@ zY>1QVT-kK5&92Me9cHbvolRf^(5Q@`Z=Skf95Y$&>kL7WuZ=R)Q}+MD!u(=(=(M*= zlqhYsQunb76-<2UY+uV2z~qt)CU%5?4<$igi8izVhXGkFA=63#7UdM z9&ZiwW()BA2RlJ_|Bc<5@Jyj0{@yWC(yU)4xhn*qD#D*GHh~HQnqTVqRr5~(PJLp+ z177~u9m~w$(#EM0P&NGasFWHD5ta)6`k+f)XIwns9}>Ju)+CR$;OQC)&_1GZW(Q-z zv|wJ^$`}Nx>cWKn7L&Z#4R%>HyX;z6lZ91NoaRwWp3Xc`?EK^CctL1iq5KCiFBe*5 zF_qAHQhk<2ODb)u57$gpMMHuDx2n2jMNhX){YLk*{1?w627?Sv$mu$fKXKBS>*<=} zC8;NZndP)&{5pMAJNHM|g~!!}&M9)ssG1k4o{-nCm=v-w_S-CRLj;;dtxx{8yY z!b%UsgW$Ov>#JsEe|ik2bev}Sy6u}QB9O49oey8QIz0sF2uVOLmJjg82X8_rTYBCT z>Hj%KR$FBrXF2BycK3%W?7D0`{QNH=nnWEj@9Cz@ZT=?2KEt@vC>l-6+Pzz0*|Kw$ zI>*l=7kEV13$-i(t-9WVi(~Xs`ur7Hf5P!U&p~fjsR>jS(k=qt8@D|Cl{Vfs*B*t( zMc*j!Og)(^Y9yKRa!C$_&xa3xPLw;{{yL^P4UJzuz*#&65gGEBW6&)0O-h^Y?P`LjP|>Xd zEqWhj;I&a}(_81b%+@`75^KkE@D?SJ*(M}bKN4PsbdKI=&3?02pHHln8MO393#TB7 zMl%`kz^9G=mabGe%&A~#-zyovW3R1KSM=j2k-cwEF9huKnZX5#C31eWI3e5W29i9y zZzZOo-#3myN^4i(K@Mi8mZRhRVvrOrg7;u?UkUx@ow^=y1L{LN@jvWqEEl94BRNjb zwW8>s@3PDEEJFJUWGZA*u)SKPcX=8hUsL}Go=1E5|IR6blebZ8h)O$gcKYW1t+hCZ zk&k}V7~~*+4uDJJ-cJ9pwznx9>F)LW*PFZ8LnQLAI;yd`^!K=-+!8yg%3F%AUxcag z^xBTSX(i6-Lm!n45`iD%>A6H3zlrKB2=w?0`JCeqmIsBe;9a^~a8p&kU*2^bQw|5M zslZ02C7zq@a8Cp$fNg5RM=JNJlRqBNG|0Hs7(9_qjumAx-sq+JjCuf`AiWjm%8{AY zv*FNEIQu|9|4wW5;T7+pkz>T)x!l%ykXoViRsqLlGI|h@J{KL(aM%C+@otBxP$Q!+ z`3`Q(q_ADM)Qx^zJ>%wN-`O%nu=u&vSOyI3sN4$Uz`PzQa!5C^E}_8HkV%V8>&&4~ z@x~oiY0WL|>()_O#D_<{7~tsXha&13qqhj--z&M^_v-Q-{ne`~@$T27X5Bv;IW7Lj zHR^_WRIQmC4wPQEoxXd9#Im5}R(z{(Rbp3^yHvrfHDbr=33|_-gy;aVPmi zA#+0IOkq9Yk zP+qrv%LSE(QQllx&tft*)d}8{myht};lJ>=v$D@B9bdQo2q9@+h^4=R@nUz>o8vSTV;|p`#;ev2E6G z_!&7%Z;9q!6N3*n2d(P?Q9{CLZC?n;F+zpS0B&hHl2YUmTa+ zNENL7Pil^A%A+iRpEqszA&Osfb6xZ4QHr+5$A{?6wHrM(5IxA2!y8Q7H+(1{WfwVS@SR*w7sb~tsU8t>2=4FTvX%j4HG zv)%f80xj8E+D+J>yKt^Ap}B&tO|>h%s0UKay;n7gxad>?Yu8MkWuLwo(rpP0Pu;+w0DgcnR^A-wlNwcG`TF6KLxa$#P3toe zG7e$Y6Y&a0Yc!Sgo%<4>8F#;WU|3zTx$2-2W#1x1k;CnAs6GPc0haKKVeY-(R^8J* zI4CclkTWy_7W7d2&htFd%QwE#SJ}-_D<7#L-nfyLa*-Y)ZB#r&z4t6vgyQM{H+2Ed zhv9xpvuuf1z87=DqO?`n`qq+}&Mx9(R@eHn z<5G%K0LJ4WLpK3*Y$Rp1uxMb~aTMRM!HpV`FCOR(vvlq2v5RYpb?-0xM(KPbm}|y8 z5SZ_?wJ9?TCoXkH)Y>h{#NVL0V(SHs6o;V~Qh?T+Gz!X8g~BT@uA$t;tliY+G_?r@ zaFbdF=F)#H#|F;PG(cVf(CVbkbzs!E1Zg)ukK#^G>lr>NcM9A{fIYcmqv+chsFb9@ zJK*_OasHd4bz4mTmP^L#uevA~tF8i8-cpKI`5&^O8c@uRwju&wuhqsrV>|h1~pJhi1^r zK++lB4*P!RZ4JJk8-qh3GRcMBTVXmnI^iA&6@V>nQ~Bkrnyx=Gz;qj3JjrI4b4F$T z!f0$1H`p~67P|=-o#b2wgaDej(CaWH&&iT}Lqn&u=y;$%aWz1TXWNBa^a1BBo3vM< z#-$G7(0ooy6{vnQ8X$_VWG~VS_3064?VHA zRJ!!Lp9O3XSB~xRX9Wh^<+5o|aLw)dyIL)f^&*DRV{xKa@FI&dqWg~Dm^yQ|lVNSi zY<-+xxXa=Zb4j9Zf4PcRnv%5&Q((Y593)=3_joloxVq_IPLqPs=-Nm6%OQyQW_(u!CsnJF4Et2FwH7?AEMkTp-SFgMp7|Sh9#Id^5xT6&o zN=R*~lA3XihWT!c6N;wxwR_@gpV~Qf6Q+!F=du0wf30l!^jH#w`CPS0uq00K(dc(i#KV|G93(aWF1mE>$HC9< z*ACZ9u+8sw+{vPQ6*Rd+q@9L4V9&+}JxTI)I4OoVgH-M|K3oq<_VQjk8Dl76U>w{0 zLSkw42~T@|QgddKs-aGtAFYr#43U(a+c^i^FxjqxLP+zumURvYD@P z2Aeu{d}f~Ha8<)o3Tqj}cE`$#q6S&MrsQHrOh@(kdx}#hWQtS!2SRE#b)t_;Rn1xy zhl<5<(y71~*<@JCj(WSFr zPy^ zviE4LC2D^M5i{enWcJVH&vLFe$C9GVeg*y5hbK#;k5EF|@e5EPd}7~R>&M-m>|RDF zhE4S&kD1NXS1xKFUg1t}kC`Kd5PT(FUI3L++8v)6b*)TgJ8wB7A`Plw375f>Wvyc^ zd$0a{pMzm^9u=X09Kd9W4c0N+p+PEH|D^1XqcdWnD z$TsQluhj=R4bP9673!;NMQh_CGjvMZhbvqMMX=xRNc&`2ipdKl2Nst~IZPk!+_8f^ zH;lna3~{tbJXgl1^+#709J+UHF z;y~P|OOBfXFRk0MYqkTpn4;$~X(%X~dyAjc@-m&eQP(RkXuhO7`DaIfpWk1?uGpPI z!=E0@u}jG0&!h)c zil|5-mQz($A)AZpk65A`0i)SbT)g!R3^5+ReE$6Td5&U@;!ce_>p?7|^sna~Yxkh8 zHI#W0yN#sl!ykowiBpfMJk#N4pJ7<)W;-7iy|s z$2ru%rLrE%C0^v4)9g)Z=*V&ChW50U6@Gc+Nu8eVS2MrS7|cL#5ph_>>yukM?9~N&{M`6PjQcnmnC)e zzPls2y4u=`ZYX@D|44fYt^RhFHWsjCQKmaqF}2a{kgAHQdF5Z(T~5L#OLk?Q_Fl*u zSeiDg#8zTbusf@;JFC+_T?!24R-5)Zf2aB5fhM0>w~+mY4%(B_9VGYUp2k8rQ*rI2 z575T&oobx!8QQ3r(q0O{*|V_JVu5JN$H!Nv4vkeT(&$T5(T8i3%^XP0XM#zpXLh_S zBkd9r7c8S?)%DQi!j+C}NZr;oXxor+k6mp~nl9l#{eHRP2>?i+Pkec=Y_pr@$!#>F z-nE=?40ov&AwYj~Shpp2f9 zKmDFlR-&zrobil9V!qFrJ{~|R)dVVN$aIrfl%(YJ0@*s)kxFWev~T_%DmgKm*zpEZ zu`XtRytahC60@I+Fgr_i-{Nkzz#ciQPEvMm66*EF<6N7@tYo2=gO%1ju7it&QEP%s zOBf$WK_Sun@5>`zsy>W-3-`dEt7ecveNJw96T`U~cxzh!cZQIMET=wqKhjN$=8W1avEnl$cTgfc!| zTHhNXeDF-mXd%up!0Y`^mP@xcEALP*!XW;(OX-dCW>?MPDqoEX8&x^H9BlQ^F~)dA%D8@rQj=@CicjiQ zzsmLDJsN9Lj5($~R23Gpe0J`FUrMRvV;Pf(v`o$FfCdV6C|_#n2(tA5{7BaCt?X`n zVbrPS>}B4%H(mMb&{Sfnn`nv4@%R@Tf+U$nT8h^mnt$rP(MT%g{uPQ6pQ&8TfTlS5rK~2D&tSWo#m0%piB+h-wzOCqVHK1zm>i&l zY2Tu_l4Yqq^sfB46K5mwA%lUz=_O#3{83V?v+}9K^Vv8SJKG`XxaI?c@QJmlbZuPP zGxmGJ4#{+&^30U0y|%W7c%Zqm)h3l=|8%e^6ULQ31^M9RAT+eb^63z0*FOJ|ZKEc5 zwo~dGa69zFImxU#>dOQC@R-DI`hG815sH!^gLh&3E)9@3_aM#c1%1?^VMr7R^PEq6 z7V`C+i9oogv0AJtwblaVC!{;|k2f#BR-or7>w$YuZMHnqqsynzP^F zim-Qbg)bu}v-H+Q(aMpUT)Bp(hSlACobKC79QYUM?k|6Aq0%Az2-ROo3eJEurGke6 zdE2T@^vm*!(#ykQ3RES4jyen?Y|#3K&FcnJ0uw@Epp%+1MBfAquL6K*EUEQF#`0HEpkK@04%CFD$1H zttkBp=iJZ|>5{`0>p{GhlseOASJR}UF2EcJZnLwV0P~j^(UecBT`Wmau>EaHGuPI5 zFQ2SQ24qLx-9}wqZEQ!M%r%E+AWc4)gqPfPpf73H@6T74EJy?#in0>Mbs#Tskf5pl zcIyApRo@+56Sbk8_|`5_x`Dxbe-C5%^oV4A7zm$*+Y3^)W(VOBhIx6^y13qdO0=@S zFkS0v;^ykKS-gU;ZDi!#e0OWR#((V$mIb;wPqe>+_ z|G<>_{R22e1eoo`qmT`j_s2gMq0Y3qQg)HSbVDKwJ z$tAh>$O?&Mg4h05HZ56c>GYaD^42pI`#mXQ==jw%Tk{I(GOx9%w4s?xQAy$kHAH&y zjnJYE+=wjZjpblX&58`9@-4!syE(xwggJu(pnf^Q2DW_|f0%Luv-Z=8qx>KayNX2# zwu8KM_JyJDHI&U&p9o7ls+(BjXfS6}>SPq8vh0N+I1EhpVl4BmS|@8w0{0$HjjH(G zIaB32mDa31*=3C%{I;)T`cB`IsH#Lf7ymzJL7S3-B66$UT|c>kGI?LjVe`Qcw{KKo zY~;k~f@z8sE4DMPU1kg>W^b6S-pNx=S)=98``og+lhsS*-8~^3XVnu_sq|t~PUI-} z=e`VW;sx%ZWt zypnMB+Uo)PwlgSETe*1#Z1@QV9sAk&N}L@suRMEJ(r!j@a~&3nufXiHX6otTyP*V> zj?-V6x32CZT6v-87H1}WRW>`c%Y}NguM9vZFnBX9U~zi>uY-t>d}Ec|kqsz(eJd;7 z%f5ygk+km7LWx8r=eRi0qI^;F!&EV$#&s{?j`$8#Qo3C!iJebNZzX;jzn_nxJ&Te= zWmB%rFBogPPgTVzMHBSr%Tn-MnY0h!Jf5UDqI~L2YKRV&jwGYEv;xJvB4VCR%5TeO z+f1}GzMG>nyN53l%9MS<`@ z&bXq_7^_89J+OfF+{7CFA3L8&pOL@lhS5>pOwe}P9SyfAoA>kE)(dllwI=b>eBViR zWW_0UWndFw5=3x?ZL;HsUn!@#O@{;^TN-b(V+!_F5UkcZnJ%*GzD zP0d1ZiZLv%%D-rtfHCd!W^42hUGSATd7(OZ<#m3co6X;E-MKQtaB%q-JF}WQc`%Qo zOaUv0Y!eQc3Jo14UZu@qM$ZS(3?lFDkLw6lDR}Ow^(BR$yT#iY^%Gh5;LJpn;)BS_ z_jNQPVF$hhfrT&;hD3S`>y>_DZ zq_%Ht_Y995;}mUlC2_9zWk>n6oL!=28>HXeMv_7KY0MIxLuT658e3v!s@laWOQq`k zMTP_nZoI;ZnsM^?xp#an5>vLyu)h*-S((UTGjDr5PSbu^weqU&si^0tK=V?x;pH`5 zG1jt~&xm#EcrG8%@ni7m@&>USWokD7ktlrb-F8Xw8WAbCL@ipYWPSK96K!`2;N!#T z%EoQJW@fGP%dr}%wmkG+Kn)l#MUIgE274j^!YlF8iQ8TwS0=THrFHp4CpsWhk>Xc$-{AQ1LE4ia49Op7kYy$AN1s3Gz{%&}yEyUZ zISp-sfl8hQ|5@iFD{=>vc%Z#g;%F0RDK_z#KP_of#3OiXlS+On-UkzBbapmovf;tr zr}>pz!QkRzFqC~Y0EUw7paZ+8N{CJed*HOYNBZu+K6 zxUvv*<;cuU%)tHK1UHzl)P)vE$hZh7tt0~gM1QJ_u>T4EX@_Apj5eNhF*l)MM`-SR zy(90aJDuKq+(BZe6FadFC);f`^``kw-_sgJ%{q&O!gXh1apJg0{x93NC2?iaLC(RL zlGY8qGr3NnY`7PBri!Mbh_JH(+$D3WCehMj0|&RMwqAO9Yiw2CE^m&?m2V6i!F=ae zHEUp2_F#{iRu6!<&486@Db$lec6W6XOS{Zsyj&`z)BPT!UFrKJRgYv<ffwenDj^S_%uyLQ$!Abn{@>5mD3`u+lXO6S%2@D7McQh)Sw+Pq7YhRnIIFC_@=6FMrr`#U1(U&}*kz(_>+IGb{Ds7YMO za8Zfia$^7zn4yl-0@XcWn!rRvYv!KoVcDRPwdS4qY`M$sVjf1Z{KTb6~)+)Gs<3>smGOYRM+M2m4f;xgIzV7}`8BPBuA?;gcw?+Z{w^R6E+N?i z00)H}g{M9OfB(d7S(X+W=z`rK9Poo-dw;pi!2@F8FV;iBZ}-d)mx7})Y6+uHUtGSAu*yi=i33{U5&*^MPV9C=F>G{r&M;8hT{^{Nd;S|2dZ) zwvaJ`WJAG4aMueMG+7{O|If?w;NLGc3_@yE^Fg_ed?T21Qh|Q`AOHUC-~L`7)aDtC zn8d_43kwTy=;b1RHm)xJUA7|sxFL()->>xFFDY5%|MdVQ--U4IP@msMzX1*>V*lwk zV$lo?SYDLnX~@se_5AnWzP$%QXd_BWU_j*q3$|EmzHF|J9f{|VlqVSY`}>2AGQq8U zG&Z@h+;_?t!gGs$=iYn8Ke5y!=Qn!tD=#nQd-62+zJQIn`Vz1g7ykAm-szVN6FCSQ7HAv@oEhF6cl82UvjV)Ayl8|^3+EeNUoQA{gj7_lVg4G) zV-pI#UL;@TqGqg!9;764`i~q$sQwiYxcI}shYy^I;6c0tV2{@W(|IdiDF?FnR3S2_ z?f!07Bz|?2Mnm+%NX873pp2M(^gl^K_7CBbeI?!0~~E1fXU_kixelsZc!!P}xP~ z=>J39n}Fq7z&$ZJ3jN<5cTX^g!$dOu(H2q# z9laR5m>C+hpy?kJ>e#$L#L2;S%b3-bn>Q1nem^3z124{C=8RM(&>*zUgRhL-y}cJi z_pr~!uZX_j>E&!~?=dmY#h%;Eh)sn({T+tCZBL(Ajv?H`5K@`rkI!`!(j#VQ--e{s zX>h<(JQ?ea3l}BXwe3qn!!ln1dPQDv8|_7pw|RAZBbqPXCCy$Z) z{h23Dxu*u>5|``|hkoA4H=7IxoH09AH9rNzfRiBeuNEplkFOvsEG&S=t$l(X8SiE% ziGwn>j}1XGyGa1zNOFnz5y-6MCE}ny9tvh1LA8U|nyue2;QK<2k2dcT?zrDPGG%h+ z|2REy&Bx~uqRxKgjPvSS=nS* z{Bgh9q40f6i*XmUWFQ?|VJ4xI`np)fzdh?@Uvq&_r%L1KvxN?EG5jUvWu^w@yleb0 zA=LK>@0K%ZxhX$S!dvnlN#+%fzO-NT_3$X{^n(E?J4x`wID7I+tFoe(|8#U6H?%$? z&^Nq?l|9lS%v8m2fSBZ@#KfqNIS{2Y&E8;9A;4VXeRtp9y}k?@h^mmY6*N;;Sa0@d ze4dj?6w1e4uYP4xZ}e~wI>%SlIW$a=(n6{eA@$QNzR8`kB!w_m6aU>Lx|p z{gi(G{CUBR8?~Xn;O_2ThL%VT0|SG$tYzhQR+E(Y_26JG9-e4wrrfn_SF1yOdmzTy z$+Iw!%ATw;jp^WBzMTI6mIZ~XjEr>W9j|vgL|N*Kp1N^$OMg(Sji8p67PAcPVcYuS8{6XQwdpUP?+_>J2abQN`+5K@sO;Xcg(GNxCy*#*9TvmkOGi zwmJ1S1Zvp#FSIA9b@nwHH#d!*L2N+1e2dZD0g<$82~zo|vl1O72c7NH zA5>Mc+G>0!wALDPs_}T`t!`jP)CZS7{+g6Xs3{z8HiXUv>AfL=Ze z2y_UoU0V$&WNCF1UI2q46`;RTP14%cXza^3Ih7!l8lRW#y+*70fli<7wZ4gta0u8i z^v@WwBj9-1zkRY&!|}c)6gPM*SzF~Rs77Po-~tVA-MWQnguYMA$733{7gJs z5CmzCT3KxOjvNG=e z>*xh&5w1!#@o;y4-Yt4+<$>Gr4wxuCq0`%+ z{3)D=4^Qyk^|x%RgeqyQXyO$>F}1O>nvt^FvM58p1S#gM$_r zGL4CH5-wj(ZXW;qE(oH2v}-ix5K-;D`}ehuA5Vnv0l)s-OY|Xu)n#j2dtv8kQaUCM zqwD*aNA+*N{2~X^9fF7eRPRF(1O#tBtw~ebhhKfbm`XE+ZcIS?C{2`wABlE22CdrE_vyQKvv=mFpMK(;J6C<@ z&Oh|@^|_E*qA#v$ql>e%NYs87?kI&p5Q^W4aJdX^bIDLs;c5JyqA7?+$D$#T&J&$( zabtHHIShASaC_jGf_`siKTW(l;XjKZK^9lD18OtbbBVW1CCTiit)bpB)*^Vm76s*-fH)^AF)-oXq z(rHL`3{x!8dR7Tx-V}67B5#%INP9FwK{z>12v^;LY{7vu>IV@hZb3|c{?9*!WM%cB z^{9omULIK&J-zGjoz+czoG`UvRbyk;Fj8gZP)$7j8JO0D z%qgayoX!n&+r!Oh)C5OLr)OjcZ`!1T8LUZZB{(skfN+_Od}@bqP&o}*gbTsZGw|WT zOTM(9eeTw4ZxZRMJ4yS2M8nVDzxwDu1?v8=2t>&=bW1Nxr4 zynISd2K%And1WjohZmcnA9UY<0ZKYv1RebT`|rY<7akqF4F80lZUgH&lGcDZ1w7?* z?%X*>!ILLDFa-4_l-hi+Ul)PP5Y`litFFAAmZr^upihNR_EwAbK{@rq+Q2Q9t~= z+6?hS--i#8eJP|D0ux8J(=Qq}*lanj|00-B^dK_P;aBeG>wBanIyO`*!2tiFdi3bg z;O?LYCK#G>wDM4Dm5!lhT#TfEuy8ph$c3PvvM4`4zqW-A+Czu)cM0ipGtp8}xdr1Q zAR(bXju!EPf>Jo$mUr($;XU-An&g|4lY^$+PaicqFuze_JBJ0bSFTR&AhkW{Ezxl(%nKYLfOH6Z9w3fQ!=8imBISv7B7adq0+H7(U z`t{~C#1@V8FKO1#`}f){ds6dW6jxVk(QwbrL-l;;9)&bD9Sp{R7F?&RP>rDG|JiYe zR8)K*(-upMhSS3%d-5*&@Q=L~MGZ;JZku;$-Ff!Deuyy>S zH{DD!?SO{Op$osv$+mTfqy43&>hh7$vZl=2QhjI*$&=0JOU z`v~SFQ17vJrVE81(5sR@Vs2y<3f&=gBP?PME|>}cD3SN>sp9>83JVKCgqJcy&QlA? zXQLH?Gy)XY-3!s~p+kpwHrYp#8vx{2DSeec#Q<6?YS4$cNzMWq;YDYhp@qOgk$a?4 z+YnkL8aTaaX&Z4!?7V{5nGY>9N4()=BqITGTf*&};x^S%1ma z1Vlgt5J2ZIm>~%00kSa4G*ccUw`a|st-zAqyctrJ|75cK{r!<@AKh{(9Z(S+Ys8EB zLhqJ97z}bBkf?Zx9a*qTULF^S$x4P);8HJn#Nr05MOc9kA8arIa6?f&1IWK*M`KP7 zW*e`;*wd74+n7vu075WfB(YYI*ZTG>2lciyFq!Zy3xWj^1?A;xtRt3|!V4BGz~llc zv+IgTcAsS?G0n}Rw(r=HaW_xR24AX?eD5Tb?*EBvh?*Ym=I?Dhuj6{Oxa#zw{r>@)c}? zBF$!5S$iBQAxy#=bC8yi5yq)GQGfgbY|ry;4^M-JB_FB+H|58$`>PN4;n>x5Cg$@r z#v`}H66<$h;?}ty;et#>6ZoR%)m>d(q}7hQ$Ydd^rIkXMf^4E4VJf0k>krzi{a1W9 z^bqs>SV(d^mKU*flxWa9A}a^rVYQ!;3slw`7FJejuxP5V{ByQPrH{i=Ei)Of>deCE zGbYR1d;gVQNsN*hgAON!8#Ij-NIeZ5V1;2ow>;f$gt8KVV8{j_eyYIA|xjlctQD8wYKEO-(ve(y%buBQznwI?L#QYD@un z>f`U^3Gk}SHnFsf!D{J@20f0F4=wGx$bM4x|4dw%G{~B7Ad$gRZ`s(H=Y%2x7dLk# z&7p?!sMe`d>1Z5Z%Z!eUe2H{~09arp9W;O&hk31xOvY+&%RaQ5cM`5es2f5ci$}lD zn%Ci4XLX;+f+(W;fdl5*E|6BC3I!|d;?KV!&)5s0M}LN0M(aO+HZeA4vLJhMpjZ29 zg@rf{|M?3Sgk@zjYpZb?G%)?gQVFV6t>5OL%I)}xozB|iqIpSyg^y?PWh6Xb9>`X8 zNBJG^?c29AnD7s*=szcL{~1g~L~$GP!ZQ{^GQEN~ei^bagoDl9-J(oV4>G;!9D!l> zBrft2dLnl`Jw0cyJfvS&PlLNKTfiLqO!}x4VPl5;F4FzW9l8M#4rmX?cw?pwWrdJp zU&Y5q1DQJ@qIU)LV<&Y0izH8o0K#-WPefQ4Jfk9RM2za4FrI`!$D^{CJP_v5IR>na zq>RwVubO4FdE|ZQK$S)9fh5>4IulS=3MY*fgnF%;pcWcSaObI1e+rS=w{~&DH$!xA zyEb91a!Hu6U4_$R|M|lqrYcs^@8I>pdTYL$IoGc)(;(|`m(l+Sr1p(s##`PUuEP;^1T4PDRkAWylB!GuMFNB3b5 z=UTZ%@5Jj&$ef9ZgI6{oJ{hjt+}sy&WCVg@p?2F)0AtM0Ij-j1f{= z0;sJ`GWCXYa{#eB3j$>K64O6dry)8|PfHV6wQ4)U68FFUx*QV|gCBw~yK@Q?@>qmM zBC`;dluW5j0s02Obvw;t*|A`A7>VPO`tXAjz45@lUh#&-TE?!}>{Ov+dFaqBa^u)G zCJRbDw*fR!a<&Oj7p*U8bODSYc`*hu_^3QdCXfyw+}GZD(ws4l z>P)~23M@=f4?2^8+=dKikx%KoLlQjfX_^2i5GVWDAKzUFq{k!ttiVR0LdG#09 zA@rc3cCZ+tVL10#E(ZwNKvPU(apPJ{w15k;tQhTrgo&+^c8fQz36rQE+n0M z?rf|2w9+r8i|8pH9=`U9jkP~?co*((K-T5c)1UVTB-GT_7Ut*gMrqFX{{8!NXYa^b ziKNNWexBCIxK+0`wgYKiDv;(o$b4auNrh<5nl;7Z`>9thMHzIbt!0qHvZ{a{BRj%i%=E&&-bRq`-H zZ@H*JrZx}&AFK%ua|E8vw#!!dCDd5x5s-k9Y}-^UD<#MtNJpYe42Bs#(+F~`BN99< z@83t_ng+~_g(k|k&f}~ee>oP#^vF9X&ax> zUX7F#6%8K-;`xNqA!*m~Oh!Rno$iJW8vrP2KoTh>!SKbwbug}(F1m3sEOo9?)h5h@rn9Kq{k)Nj@i9^(FDg&ryoO|?3`&+Sk zgm0xNOZeWrxi+-aY>QLI2Aq4cdBZt))fQMvLqo$;r%xB*sh};@TAiJp4F}u66$}*E z>=d35T02)#iYDJeZv8Kl?mjI-debHggj594kWd`PhbjYp@qKhq83A0%ApVDB;Cix# z3?S#$fk{h+&!5NkZNkJ+OlPCv&gnO=T)Bes=%OEg{AK_C5+1{h^z@YG3c$=i+qakP zLe&Q>2ctNBPL2Tl211weT4Q>OhZ+S3W36S_jL6H+a~PLAJd$kr-HdTTB`{^cB4ZC^ z;Vf|IgSNV6yNnN;;)X=ST`63HE3iN)G;m1;!=Q`;%07)CRw~Cxm*Q@vvxT*fL7KnO z_vw>FuRFL9ZZU>djsEN{aa)`+m5FjxLuzZ;tna@kf$Z9Q#*k6g3G2<7FaR)vD8t|W z_-}%WNIm4g`|dl=fBrKvMM?i`AqqFkH`>U-?z9g6L+I;?4q7>RpdUIE99$;=c=XYu zM}%Y%LO3yebHWF?q`$vbl2(+@cNxZzgI`(H2XZRsyhTvh`$24oT5b?EZOU`75;tN5nWkWDa zj^CzRSVY7ZW_WtDIoveQvI7YWtZhU2EOh*H{#Km~PaZfwNkQenfBrw3=+D$0C@QYtEBQ#YMuU#)+lATLiI@7^~sK)PonbZ0k;ItkrTh?Dxwoqg`l zxl3>3c*Fd6VxFYhkt1Q7kOjlIYeR+a)|Qd?e9SUv?hincCq0h`D%F zqAImG4oMD4%%h}6lL8PsEM7X9sB>`W$eb(vw2WP;jC_Ja#m@x(r5XQ^yL%@gjNis< zbt?f&16Wrx3Muxv7kQ*_g zV3PLBe*A-;le&(myqE5bde;N{_S@HvJz$Ow_4+dicYBxbtpzD#8XA;fxD^L-A2Q!7 z44kM=nss#i%kCAYcHTVGcM+MK{ipXTG`>dbWS$1n^JloB2$$xKtY3#<16hdHU2%@I zEgzi)*=Hc`@oJYV?8EiY;c01U;_Kx?B{#PwkkH~BH4_sPAxTLMC}EQfR7{t4TWhOk zXOHhcgi6csjH}w;_C&3I@!|zRoD^ch+ul~tF2g&rqPuR_0u>({ZJf|VoI-|wR9Bs9AJp=8E0p|8{kYMC9(L5kIe8G<;7S68m;;wSSH~h`!?g* z4{rW)b<*^yzj^;&03kL)@hB7@BvaFE-u%7~ak5cJA2J0EAob^F`r)Gk6SR&pf4d1? z^{1I-xWS?py=`s3wZDCF#h-KDyh;l8NPSW#-PYJIAq#~Ns^J4{sGiGp-;;Egc%@l< zlZX!V?#ll;sU+ey+s?)&QcC%Nre*}~l=R!WMX}GHKL_b06UZ=~P`jH&GyVL(M?36T zasDqe=h130%aAl0sfXQo2b&=)1qIBtcRn z9lmaJ|MT@7)d@Fo11Y$SM)n89(ZAHJ0yrJX7*f(lg_kvYX$O0B>psT8rHOoKcQ|)>ky1miC+ka73MdFP?U{=Ex825@)Uywons9QOc`Uh zn0b@7cyUo-Az0woV)bVq^np^Gr9a0UsXE=d@jPLzjWym+~gGsLZt0l-($3RRMj9Us?EVnWkd=T zAYuJU_`5hmt11Gg0JmHx@$h-zGOhwZasV^3!f@XT%p`&uufa=jE?A(2YG&LJqynVK z*kKil4zAn7B9!FEA4BlY*XkgXs04q;V(9AXo;rC_VDsjz7dp$z*|h*10UhDVlvV^u zJIC4i0xOe7RR-p1Q$`2#KtH7(qccgIDQ{dC0wpgDpx@4G{9(l>GFQ z&G~vLjgv|^usR8p>S=qRyn7D?#YAVw!;$c+M^86$0}P{}4Xs7WK%*y+9Q6Ctr<_7w zCyBHj$TE9&InI5{+qbYrADc*cHT75n#ilQLZ)d`%S!OkA89MVbE4PREmxzgo?1hIR zB~6rm1y%~@PICe5$G;2<$)r|=iA|sMkQ8xlFZs|E4?6j7oq>}m^AERYh=#<=8G}tg zSNrzuRd%O;`|Xa-i94VA`cw}d3<04DQU_RrCU4cMB2h0PA1T#WQ zBau_>CdNzS_@ES#JAm70oIIJ<)nzd*Rf4}%qH+|1BPaCT$D;iGOlE1?@ppvinPW~$ zWwt^2m(I?a9MfJb|K?5h-PW#N?Knl>s-7n$B}E4qad}E=l(2GOP*60?A4a9+)n{kR zg}1NQdC_uc5l~UmHO0*DEKEHJK}pCAL#R_y6OmL9lLi8Ne7R%w-h$=+EJ8KbqAo9<>0LN*> zHxP#kjK!MukAGA=NNR>XAfEuJqo|~0KiC?Y=+K?6PO1aCa)4XM`pbiL0|T4QIcE-V z>&<1!ikKy{+X2%hhDSyeRI{An>^hvMTPk1bywc8K?=AvUTx}~v%^|S#7H^+kq#5Eg z)7yEl#&iVeFOZc;WTfplc7##TKLH=q0Ahx8;UdXuQ;h`B2RWb2tSpiu2SiDsF;u8y z;U(F=lj42=Td30&eGFdw3bVj)G=5_b59`pEt2( z(8B1yKm{MudjAF$oHA8J6^MTl4S2V5Gkcp4>R;RV=Q8#mA1dsXQJ;;|RU3gA7q?mR zPr-NZ-cbP+qx|eRo|KlV^z`%~NL32C=it;H?*9q%vD=}H-fEeen%ejAV=0b8@otCd zY=LJI9|V>pj3QD+n4B@ZNs3%Js#I{b9dp%3hKCEPs#3!vPBke0PwBo+lI-M}^wnBf+&2^lY@szxvW=xlzs?|%xbt&d-O0x!Wnn}k>t7i)mu z11K*J_0x8gY5nndDT@E#kXV>+!~P^Mg^sS82A`QrX8M7<6TA3!=BEL;D{Szgo_Eth zE_zHSe^5?1@#0PO$#sxpp+NM%h&HFQ^Y|T;1px%EV&8v%!D*%+a@|d+U3=v_n{-qB;d&CTkT0cAx+ic$^sR}d$@Tv$GRN|Jw^{@t`_9J&I$B}_;H zJEg6tP{&LWu-bOD4kBEfIddjZz}j!WD=~BOcMlr>`s=T_@fN`u5#MnHMM$Hqbt?OJ zc1BifI`!Gy1}1@D4&l?Cardc!j^96MeDxnfu*DX0)mmFyg#^CrwK;v=eZlL)HQwMLk_$`9V%l-I0GYf)aR(s5kbWY<#5T_|CYZ@9gj4HsbdB% zz-{o+EACr2uAU_XIG#ocwA^r*CFJbvT#1i#HDCq%9f5)THGQJoH1n~;R{74qF&H$$ z4Ro>%_fNpMN$zdOLQtN+e3QM|*V|`yX!>Yz==tH@h%NQWQy?giUfr;CV zj?C~w?q=)YVD;^H<-h%IQV^eVAUMsapa;}dF9H5D*}}>(jX=_p>L)RjF+3EomN*Ik z;Mk6!T80vvx!q|sgzf9X+f(k`xdV7uaqmx)pDe9s`p(Vy;fGQbM@c~4k`OP8Qba!p zXK;H$sy1Lz;B7F1?mJX+gX(^sJ{vmoCv&E|_b@?AamSx?$)-Kjh)=}5ZUg4kZ#fNF zovOc&%0DOtI)~jS-}|A)*L%v5{Np!lDpjT>{A?k-8cLpI(#fs$>|=(op&LZ_)0@u` z=MJdm$_&4Y7cW-M@B?B@G>7%d?EnFEb?dGMt=74S8h|-?0#$3?1q~uyjR9E0hB6h? zBXG?+5GeTrfJ{+j-?n7c*`W|hXFpxcI_|l(X~#oBy0+|A1>h*zjHDZpNt9##Q23)l zyfDR>ES&KKFixtR>QBhYxdHMpHqFm@lyg&=?8XPfg%Eb1a)f>#L7E;gpkDPWWZdwEq;Srf(y6-0HdE@IPQqhP^_?WJMw>k z0{5SOntacf?q6>*M>5aV*+OdPsd%Ad$BrR7SHnrMv{KUw5r6-kZFi z?|OVAi2#r4THUo7ev;<}l@ib~WW0|1>;3q=_3QQLh$JYS!hJV4H=Vi)u1L?x zQ77u!+GfZ0PhE|WmdW+txrGoB4SVTALP9ts9O}oxAS!BXY$WX5M&JA>&`s$rTV8*u z1xBa>j-kVfq3+(^wab=WyBe^Hy|xcEyx9lhU1v7~%G4;xczjfQZX?V zP(ukgBUdUTBeVH)(>c+NQ-M(DH>>kd6025vn=c1+9m)n%rZLPaBctvqAA_j62oG8Y zn1pfS#0eNwCNP1jHIG(lDF(9_xZ;nm7mh=24gqTzzJUtXTHxqBbpZ3s+RMU4^$uuU zt*GHeKs7Fdo$7T47=yQ-nz;>Zp5Y=50dePcLHL!^NH($rT17al^ z>Fn&Vp;{Zj10{<1emoG(*(70x>&E}>DsX6T!$Bh^y+w6-S(yYfbX2jPJ$iJjCQs(% zhY$>4YHV^zsjR6t0-j_BE&z|Dg)eY+o(eY3?l$u6YH*nG19_7?^!Oi2H)PWfcxNG! zt-`o02N)KUj5a@RHp&l>1&uP!h#%=$^h&-xi<=YHgeq}B0R7-Qu%Oi9GW_}Td(acA z!P;%IQxAB3ny;tmp2P&cnlY~+}MBOjk0i@FCO?M)T@ z%T=>yLkmDep}GWp6c%eCh_3AE#(?VVd$Wcts0~3>w34Q(h#BPx$jIm-tcQhBouZI| zo7ixszu5Np@lwnjtW2@ga_D`n5A>MUR1zN;6wGMM+ag*W`UeiJm;ek~3c?6o=cRLJ z)94*BF)_kPk%=xsF93QraLC^0E-_RG9)@L01~ti}Iy7GF23q2XQ?qT`HdYv=hEuIf z)UySYiEGJ{&YRFqBl;RqKWI+d@)Py9;Qgb3854;Cb8f;ZWP$(uem<`|Kr`{2;fu67d9-!fFoP@>_!SlS zaQ_~>`EwaHS`qZcvfz!$-m)6BKNTdhgc)HD-IV^txMo-8yBYU>X)g zq(x^%^gsAJdA7pj!nVhr7!x%%4@Rd@`PPZy{Y(~sM%)(!8R!lX?Phmll;N#JX>u0?O5E-L)AAAzw3pBts0Yf$wSjnyv<3i48rPyfTpSa~AT?Iakt)GT&T%(nR%Pn*eqZk|~m zca4dp58-{ZUeb{>idBsZuU0JuJzm{|U zo6Qq`jF64>JY&U%TtXXBUZFNe1&pu)i~JMXNSG|@?V~aZ`V>nsjZVU@buSg(QHHj- zic!e2QNSCc(ZsBClilSKeB}xsa}xme;BItG#55!&zLPQ;6OCIBFpR)UgspS{y1Mjw zvD`+SH-avGVdoYh(toq%T7L-INC6sH-Pj4{s}`&_F^S>~a|{rE65fk+_Ytr)Arzdc z;{o)X+h_%+ns~9e{NMUk%x_Nht=RYCrZUBQT@EY*n+R!zW@lZ%M@yZF5l7eLK9P96I0{HCoRA`sjGFV5={~qf-{WC~$hj{)~g9 zI`4ilLvd#o_9hjj*xnl(sSqv4J|I?!FabK3qnR)|MHlpZ6j)KfIYTrJfaQK!Sy}Lp5r6&lPi7fH zqD6pBP`4~QlY{RNZyJWWm8OEN|Go`t`|r&TvzZtdGe$Ma-)@}T4mw~pN}^GK-idvR zX5-Y8Fe`7Go5K*!3xoDBFQ=7v3lQi0q`gl#H%$LKVOZ_Vf+orO?L)X54(K_ zG-f6XZ7EhN!HDMQ{m{xmrL&)Y`W0eSLj}Wa1_KDXJJLzd0TTZee&$uT>Q4$D$Z0jFPzu z%AL6~PY~?AN8Mj?;&DQX*~PZ1dYvbuAu0EoPi<%pL;wx4G&0KOK3~5Ov5F4UwgN&TB%hDnmwJSp!bV$7R<2NH> zU8xiLbe9+i2r-YG6aIj~BDMj=5V_8i@V1%Des&;X6F7yt=!FA-S_JC`Rz7Z~fsYt! zokA#^%^u45^f@_#i1^U>M<6cYaqc{E?y1U&`n;6xa@GFlF@hy=($y)y@{DdtTcO=2 zyR7edH;B7Iral1>u0fD@}DIp2z@2ZLm(*D1Ih&@&GdO z@X9eM<{>r$b+=RaLc9))3{ycwNWnBftNYrb#Zmv-8!}G4AzY81-n%Ex9Z zRqzQ!rKZ@L(T;?Wd<^moq$a&dWLNq3JRI&*aEk5%crRDqfvk{ikaBs{0yo zw)6ZVU)1ljO*ium+7x+fr_bd*I~hKg4~>m~xNi6J(icCxvB@+nvAc2SfN5`5c4x-m zmVH6J2BY%^-k0uR`J${!04eaQ2LM)G#s;)#+&Cx@8h%0=zNpmTuV%PuRImoubh-O+ z^a`MFAwftZ8nd!o**uRY!%QS7nWy>@!nkO}>1a^P2q@W62>Oc-C%#IhGz?8Jl{leppw6%vEU@8dA<29-u80YF z)T~Dx73j{0)=7!RDI|;Px7ING;i(U(@oBNt!xgw3dg{?DU&&$+pMuCeRF(%8akyW< z*3ZJ-9rR&l#))1w*_x`NWZfv>1qTHuipxX{GbpW9?s1^ru zatU!WTM@=fplTyVevP#kaS{5)Q78ZT#~%-Znsyjj7&^^CTUnV0*5n>>FyLB?*5*in z(y*TO9K%MRV^fRq*n6Qd;KfM72H64HEr&csKg#trhnai!tV47v4n3uHC~D?$8;yVI z-_KX@d3ZPwY3zl=5_zu%1-*!EiikbHWo#r66+$CVF|da=u%06#IfMr&DM7bC;)M-F z@ID2`h!XlKy+AHPxz!s_j8v$0k2uJxHUdK^kvj^Q`pc{_>MFTbiCU{MsVfxi4p;Eo zi-6mzcS&VVmNPFYXsBVAbs=v*v;jGCUcm2dXB}jROM;0&h0c5kkHy8Mow*YcVQ^fJ zT4=GsV#uFje2$=Hq!?5yQ&6jqQe9?9)^;cJl*5rN-Bwr7)!N04PK%?*q0Cc0m>r6= z%a}%tei+17opE)GxqJk{XYiyRW77!Nu0#gy;Zg-%5t3Qqi+WZKn_!OF=@?x)>k|B- zDeQ|U+#)_HxIlabUqBk3b*TXjbu&f}xbEA(|9%S00hS18x(Uv`JnN#j_gb6lDC6@m zS8v?-s%j#9meb&2iPk=MPH?F#8G$IG)zrcm7QfB)D2AW%5}Odd`rOcF$>PN(j6m?( zmKk}%?%jw|k5WBrB*Qv=S~{ct_|kWuGmA0BJytKhY)X*g)!kbkKYX~GWvD(eICxwg z4Mtv!pYbBV7K;%+9WLq*Z`+1MK^iCko}a)!^t(Snhsbj@Y%ew9Ejn@Fsqy9|fTZU% zKY4ws`7ajTm`$77c6t4pgT5rb0TB=zd8!E%E_K4? z?Zw|1O!gE*#E17@4qj@0ZSW%gkI??bix!0;@Dl{fA2HfgEm%Qzu%%1Qm#8mj%B=_x zGa_&k0fp`jkDz`^Us)0`33w|7;&Y1LuU}P=c*fsYPa{S%#mX=U#)QA6(r4J-{)Gq6 z4i~hXAzNiIHu6r!XILE$clpV)G!NtUgu(SjAb-sm_H5#f0%L7Y<(>42(7OU|X#lPQ3AAtQ8!sh3tt^P7L<`)oPXVhnS4N%(y{HajUipN4UKrIr#P6tS_%o1cFMhw?^-u%gCu-3rUJ(xr7g(RsFcs)k ze4MI;C?7yxC_LVx_oJZcq*`_53NTSBrFI*1=6Be*5Nd>t>O}6X3G@*e!7ai=sS_97 zsf;mezbxF`y2Alz5u)xBozy0oXk=&qnldb0 zVQO?BVqe^QJDj0SfWCdk>gw`+KF7YhySR0rt40m?DOx`xHSBTQSuu7i1Ne~1_U)<& z>Rz=PqibY-ONPkXdpA7LGMU=FT-uvgMb+S@%ZPbKfBXCEOC zew_yOlK_jNCUivS6wq$oa0Xnz4um~7oH_&vDWk4d__l$9-)_F*6a?vdEpryAGwt%>98n_I%9L`4*)tn2hqId!pM7nl>WYmi!1!$!-uL{dp_%Y7#gaEn@T8p6@Q)(IIOa!wsydiQ9b4hK*1qsfz#YN z{@EyMC~I+i_2>BNwD{kUWviii6yv;CT^MRda3AKuMuIOjjn33NpLFLVvrt8Bf8E6j%NrL*EAr8(O;6JpYTyX;kf<+gahnGSiN*r zOgDFM{AQ8YJUM*KH=N`Z+&cH5Xamr|I>4`kqn;OVf@u3&YSnV%`#jE}btq9Ax-jN4 zci2yr_S8aiijg_}kQ{4@pRlQ9liz5QcI*n!Ofcx~Vhd(bVRFj5-b{Qw`#5Nl)B7?rMv;dwPa_p5|9#krnE% zFaP>WlYe+vxsx48{O#K|=9BOGw{Q7RMjL-m4<$p5ws9ux(! zH~;dSlZg<=#u`-g?tp9}EyL!Hus7+UvC3Bt%+#*w1zkvDqjdE55D{b(B;f$e*}+l3 ztr+kMKNF_I(Uu{%4IqR%m>W}Dq__UtQPz75NE>y^1xTeAMWJByV*Ymm5209s()*O9 ziJuJH*zdaLS44rVBc8`?85}mw5FsMMe9{y8H#f_|;=dU-_K$PuDSdmZ$?tqUXd7!# zZmWd$-Bc3K{^vB21*Vgo3Q`%U@kzr3On*HLPrOHo;@`ghSJ&-tzxSVR&59Rn{L1Ye zamUd-wF!$q-v&`Cj70N2yPeos10`!^5xPA&)g z?b6yOcdZ^eh_>(xQE0iB!3#NRi!64(_SJF4|9oun-T(HCO%_uZ?A!O!B)++Z$?v); zescm-Klkm2Y@SfJWzr6T_3;wZ<}U5E^3*YM6G!)qbre3?J#7)Hq$AFv0xsz|Qjd;3 zAi=`JiSJR7@^|9`K*@#4nY%wbt5iwh|gF0KGzq%7Z zUL`PDh$-EnU=Q&kO7|J5=cX3BNp;%J$pyw}#9U<*G&E$rJPm3Qb($lzIa!mRgLQ@$ zj$O@YU6Mtm5CHEi_0gw!c~ln@cw@p9pD~Yg|iSb_D$%xJBI(#${@?N!1TvyqF z00d<(J%qzn;bF zoxm~{E?g*K+q{R^5_#Mt0zq0BDB_1A<0A+e`HC9!vjF;Ttr^@5-~-qt!ufSdf#SOe zUPsu-DBuo76BOkJ5EZHh0lX4Mh_FutsO5OVqxnoFB@GCXQEG;&A)%3|04Xq;J`7Z> zsJ==(55OMFFHK{rR0sv8n*CJPS7LDt$O(8YMe4)=oaabuEKu|chC>gPI_j5ElGP21^xGr zzF(=1POJeOfCAiJ5bx2srv~s92Iv!Rq%KrARW&uQ5@Ucm1yT8+Yz|F-)U*$XSdY3g zNc4va=PciVfJmsEQSOfdsXAa!>S94~wjU&q5k%?B-AgwafWVBJUc#&6b;~>kTq`Lf zgT6shT*NCvL~4?DQ-e4dTgW?O!@?MlhXATAfbztfH*e6TAoycGdT>+FI}G6p6;y+$ zSP#0+!PC!Af;fPs2jK>)1Es_?#?4h=k(?f|acZ4SIXz!HAA!9r`mU%Z7qs4V->soI zbOT5D@a?ANSB+?ODlmZJqSMURa8{8Tl-I4h`|{K*4uQW)6loizZdJxk+r=25t^4!1 zml_dzkJB27q?fg3aUq4`bSoKPHXT4NtJaw9Od3~U3@EZ*L$DM-r$o(kTnEu37!B{m zA|4nC9Kvk+F^Ic@RnnrY7`O+Msxfqsa6T=7TBLpk$Vt6)L>@qD$~u}asN{L+p44LI z2;hP07dlYAe*EYx07fZrXye;Tbt15mGf ze}0L9GO9ubC*RDXE*%i6)@ry;o#4wW+3pa3OIwZnRXxc>i6rRIgqS+0s1=et2}5=t zFDCSw5w-2y?DLnjDoVJ7)bFMcUx;P@p=p~{&AnYLdz7uXUL^pWWrb1y_p_6{7fV$x zc}}C7anB?sVjv{P!dTG%iXsBZSW=fDIS%33+FIV?-6&m&rkvFibtsclAnGJ8Wkem4$FMK+Asip|VcrICo*tfFCUuPZs^=sluiuWG;W7hEk?4xCsqn&$YjSt=3ZV*iefi^g z9`)a)UG)?rg0N4_MuS51Ik4bSYgLDgL>15-7HXCIRMFcG8Zvbo2=%-3bZGff50LTD zKZQUtc1Aa;2SQtd!9-(YG{BPqR8h=e8$gvV1&+siX@_c5pGuaKL)M4KbEr*}KmsB` z^?ZywAMC&Q=>~vgC~%~5ZPRIRtg`|=Qz+RPwpRnv#o+qA>Yi?xao@qt!`zk`z-FO= zumUL_;Naq#H}%T#yLw=A!<(9##5cDBoFTn5@y#YKsL>DvNM5pXghQ_ZzJ;F&F3#Fd z^dfLY>hXHgXlxNg2TfV-3UIc}X#$W!RAS|Q{F0ZKsLhuz z=YNNQQZ=x=JLogA1fkIabA+LDM*2H-8_>f>9q+KKDj~f&dIfX*B=IlqLl z@+kJ;GdhJ*5?DPmsqBr5UxmsM-Fadw01ss`iUZg0##Lsmi5G822NVwBl4Tbp#|b3A z7CL;FfIGnXAw(UC&*%|y^wb0qo)z}TAAfA`B}N2_w}LMnp}b%Y15B(t(fh1V5H%5k z{050THf;H>{v_NtAxW1nUtUA~sM-Qr8Rk)I|>{f5g<{b9*o{Sfp z{?x*vk%>q}3lF&Dwzy&wov67N4oi4m+^cbNcZI?U zX3#=HykQeKIJ15(NsE#}xorROrxIe=kT75;2zzQkM;#F3L62fDL=#A9ld5G*RW$FR zBN2Qd6X6xmsRT>#3wU*+=oo<^R-}jlP6|p}b0||qPs^ISJcj^=0TU$$hMoin>ZrgT zk^cr3Q~{0<#VJ^$ayUQ@oK%wdL?{IBP0UjUiQJKT4Hf96^60A3*q7I@q0@0XG2OiM z_W6dylTJ=TfJc#Ym81R^jbfD`*lobFFT>USC*&|SU%ky6gq9tMkdty(PJx1~9mCHO zOp1eu1WEO@A>Pl3502K6k}!C=LdnH|tOpP@*SdgLuZa(v0$>6iU)?qC@p{mUUT|gU1i!Sb_!~9N@Vp!_Xj!<@s^7{c9G~S;KQUH>1z;@ zSmI0wc^KM3hp#fnbz+r=jGoGY)_9Rc{u8JzcKGaGQ3~3WCr(N}l3QSc1GqE%3uAc-nO zM~D_K?P%+0If;;sDx!2Rf#zrE#3%PsOEH{a>KJ$c`EImz8bNA&hC(eQe5I583mQuD1)a4{I@ zZ8W6tsjrX4fJIco#El@TOkkWw%))nYf}D%$rCAvwVU%m2X9>T8N^ zY!+gZ>|}PnhPd|d950a#spq&jgWePc{DI13fD!KCWJjSe4L)HQk+1OD(Wpu3B$;@H zc?j=@z?EK!Y`-U!SP;<@9T_7pZqRrHq+*?5@+jl-5N#XviYU1WYR^UT$R<+b%oBiz zIuBkc^^Xe|VhnR!oZg&YVh>5kXJ9@UT!I|Tzo!rKXRRikkqDKK0HLX)XfuGq{3|az z;#Yjps(v=j1wi3!Ixl#21`1KZNFj*e0&7nc0@$=DuyLqE0Mu26`M*c`7@j3e4Q~kZ zH_7(A%{$^*iXbYu?R5XbS5$+?qpX2(Ikpqq??&`82o} z2kqkoO~MfDvs;)}8`~J{*i#SPj$ay%=P$>h@MDWc2nxajzcEoOn*L_y1`_ZYMz5JCLk(jx)`JrSL4&0jzFw+l>o=IYBt<;oPO-Pf0TQ%OUW5mBtP2h>3w&Z71qV zVDiLKUs)|FS$XU_%k$<39rI*>1Jb12gS_cE(GiAt zrO_I+I7U4!umLJGI|ukf&qygpa2n&2-cBhambUZgp0h&9-9 zrlaxcAVQS`5Ll1)>T)!e!N2PwsJbyDU!Wu7Rk#(hPkEL!gkRcG1&q>5zXx@g@Qar& zrCJ#!tUaBmGkVtvq*~&P;ADxzjf!JJ2s#FMn7J;i<#+DnMrPKJBerOG9Er3SDD+Xv zw|=id^B>rQVpz_UF$1zE7~D~V1|-zrBiOVXNIPBh^pt>MlfqgHJM_5Q#aMCsL)xqO`_RJ(fZwf2CGtlg)Xh)9zdc9RY`wzi{jdF4t|c}5fu{^Z zLqj3+lE>)WNSIuV=diyxhAcG@95HSto!wLyzE!I{a}SGwCnVzd`o(o=Ba||Y`w>|M zpj;M&y$_`S$8&(ULQgtJuM=YkkY7rlkDn0Ea#ZX;#coJmv#JpH!B~_1x29-de<+6# z;IO>*HS%8Si@=FLySq^GSiLsVc6BPzsYm|8W)9<`kd`RiO#wF_`T|iPHpjlR!mz`_ zXn(IVj&~fO}E>54om5hQ3y~=$j_pso)!MA|L>?4H#qO|l_`2oMtWLqODrVkR(zoB&JmGf4&z^}jg0$R>$nyYr5K0mNGwdq53Y zL@D5i<%Rm=H$7x_BfVM9b3&!fCySe(D{um*r4u$|)(gqqwr`&e8>qW#qVt$=Op^Sf zL|<2gEPNK@JjUeK`M{JO$>rfMSsJs_RCLr;TMt)7132OFt{0*F#h{(&4un;?f zoH{kA#!Y~=M)WI+9Kdkym`ON3DQru}Ky*j4c2g(l)sbqot5)-%x15d`=Hq)h=qR_eP!Ho%7- zf_A`DkaMh}Q-a{>J;I=r<#!@`5BsN1g_S%Ib|tPd%^g5K4DHu4Y*+}E07sR^442y_cV|>JIQVWHjfPZ2F zaiaN2c!Dq}k19S$yWP&5~hYu*kZh%ls2xG{<>usBG! z1jwHm@cU>OLY!9zz)3T18vCc}7o-T&7!Yi*{rmof6b0x#wK%qvsz%3t5o%Fz@Q?RY zRUL(q_GH*$iMZY;L{{o`Ew@C(mg+Z3TK*WLZFJfid<*zbxy z4JYHU(GLq2NI^qZ@Z(1Q+*9qZJeFAkxWlBKt5-EcHgDKawMQJYh(hA5kb2~S7|M&$ z%?POiFRXBS20pWlEL}kBOS}d8$MXwZFZr6(``fMH@|(~-mY!RIb&{)VX>Bg+&x#z6 z1u=$Gf7vBvG2ugiZ~!70Wb&Q{v1RDqkSM9SE@Q5imQI&DjSGSIhqtpt8QFkHN~SH+=^F0~3y<5qcMrIbZrbtY&>e^uN?2_b{49 ztv$tvsUgPNi_mqA<(Y{}2o}wmUDCRdKA+j;NsEU z*UTk3Gtq`dx<~|jPYF~;A8+>Gno7MjtYjpB8P3uRV=Afq1uBh3fVB2B+7{cqOzA?W2AmrjYoG=A zi(x*=DrNfIL3FbwM4IAQ9>H%6eZb5#u@fThff@cvX{lb+xD z8@s7+1hEZo;T3!1>NRA4>SHI%Rll^m=Gp<{$$V>+^&feLKK6-j-EauhCqTS9Dl<7@ z>X@R2gqic)paJjvT&pYpg&lcNY9Dj{nAppa-EoRW#2g9xeK^)2>j9zGRNsRHV>POd zrbC~@mtWz_7Z5Vo-Mn?T!up;f2lH`|BQ=_SsxND43ybW}N*mtCWF`(k3-@}-;lyW{ zS^+m^fmoOXj}g((rn&-KPOxZ{Dw`*7{1Z0vcR9<_11dnGB5)^lapfyeUeZWBoO|z| zx@8l`D$@I3$aD|3?1|MxrUb6lkz2h1s-;pNn%mxcZJ^76N@KF~s3XRuQLtO3wtsUt z*mmvU^{BxEaW4Ao$8TCv*CODtEI*bv{nGMo>t~mLjYi-~+HF(9WFm>Z_cGgKMUIV= zm3O-~kB$Di%|X`3VnD)r$*{}#+q>BHPSg;nFu-4s`upzjt$mCFOg+cZ8VdgrIOSTo5-dElJ&;`F?0G!@r?GR7%lYpA zcw=K@vwH_)llrmBZgMK!N#(e)D-0zm%I0vP1Jc1EVPj)x%|)n?QwK%qC@F_IG`ea! zT%}0H)ap_>7NxqM?<<@8aX)^K-{aRGT#rk-uD;jj`}w@zulMWlSGJS8Po;bxHuvJ@4vE1`3n94+nkwzEm5ox- zE$GT8^IBIW=Q*+Ujysi;knVFa-+NZ`Ncz!(HXrpkJl(g|TF28&=};B%sa2xot~*W1 zP!?52sg&l|0+^tdK?=hDcju+K`AnUJvsS|ahmZUWfUT~_3;a`Weree=8QQ2%%(Z}Wa%`+E?WKBSK5udEeEvI272t| zW#|N}NoCmy^y<#Ixqpi5|Av#=;r&R20IIVMr2vWv3>+`}X9A>)2)V%~0+DzxT0{86RN^+NBsq2m zgPTmE!E`{)It+|hYCW)8x&BlbPedipT+eROq#}SA&tQ`Q|IDL+5<@_<47zkN)QbuS2pCq-TZmRL=@Swua@%+SFk+h5ab+oQ%=1(W+5Q$a}9=$SRE#2;0H zK@e8!+yZb24Yql-`N-Caj(6|ec|yCg7|b+n>;+bCHO&~<*z9j-8h0;M4m7aF>E3G+ zK#@3_h)MG4KycQQCC8q3EtFH17^s#Au93s-6-N&(xqaog{9ayw^K!uhS%PxOYOm8) zXOJBS*WyBl8$J9!P#r#Xx=2@1_#IaH&3>M}u%#Y=(Z1Zsai=Q&?xB$#?FuU-*NE_5 zaKDq+>eubg3qNeR&pG1F2N?ND_+C@?sMc?+N1a8a#oXR4|K*|_DBIKRANpK@IpX%v z8vu8k`P$x?*O*J{pES$I2lnfiO>||EDfP$Awav99Hc=h}ZEee+VZq9ow{Vkv--Y`= zZ4i0HHUry?>CLmNXCg~<2QIR&X}Man8ha6?kX;{BD~HpwTW3z;hPlvIN53C#d28i` zFU?eHdXQYkXI}NQ&W_83t5M0OZPKUDdG@CZMLxL-Beu_iveI0DM5anZcp(dB zUdEN_N3_>(EgZeLNy0zS{w7&3r4kcVN)$i7sJ*~;L!l3u!@)+CwBW`HwsXN3cMhI& zOaA?S#n}pk*2PaKf!3gLGZ`>IyCtE#V2zttx~$*2IjN_^_}?b+SZ|re+4Lg_OtCQJ zoP6~eJmK1UR&8*wGKS%bm~jdV9^j!%<_h9DL>mZ5pBAteW^{R4!Q~(&jbO&TU9*OP zpm(S(4q0xud|-C%F`tY3X+k-PB<$Fp3(~u+%I>nHW;4(fumA67#HK_ai+AE)NpI)% z?z*y~=fXfkv&(-1-LY1qWxht#N8bfV{dA)>=6y5f&b?z1^wt|v%(8nXVx-X}s|5PL zARO$o%g4@7FM8S(ko)w2>8Qbi65sBW7}oBuXeo+K#idd158O-9s2WwX@1)x9|4Jo@ zv$&!Fk(*t<9$3EUd)0q|(~==GXHmG;>t^1F3HL=>^ODeAHaDeedG`CSc-xVKcG5Vc z&*qjXV3V-G`EOP@s3%c=1on zEydYpM_<`W^z@8h(tUqC5*_U!*&irmjTQqnAO$$3Y#9s`Aw`yCKhWyOP-Td$0T$*# zPLMd(e2M8UkD~y=;sFJZA%#<-oFu!vZbxV4jhvvLpSj8h5**Pbhc4E}&o>3F7U4I& z`B6BOZr*Ax;$@%Yim!dM%GEx$|E%d`uq5TwNY@0*Z`)z`4KJ_nKMb^8Zw^m)drdFB z;p&~lB-rZ0cmZuO(uJ_FBWd`FNnMgZ2cVGxAr-aJz`AA|mHF0ASZyVcE|fpgwvIGeC|os)G1Izj}y%xk~=(W^jX*!+Fh z9*9;eM@xre_udJA&n2wPckY3sF&5LNg>|Xko3^XE=>4Vc3tA5j%8xuh zBsFR3>4zru4?B&S`rfl|0r+3^J z7dR^7JXoC=J5cZz9)4O;>r$t2HXPymrTjkIwiU5Za`fYB%CfwlKU%=TnT#d|D}}gS z?N%;j8Nf0edim4~l%|oCQ`2wsZn$lgr}Ma4pYh{M2Ufn{VE9+j4q}=?sjPvv zA}}14p+tHDAp5p7`Qh9wpzmrLHw{5;_+VUXS!*uJIAI@fj5^UG?L^?;e9w18>e`mo zGQ3AJnbaHzI4mKZV9>*bHq~v@IN%UTvBYXawDXeRRHx0!@jm%H!S!?$iC-KYE&}N? z`ks!{SM`|?%Y@MC@TF(+DY*o+hOZ|-ADyTZWU#eO)%}9q!$axQF%F7mw-LR$^dl1N ziw_YW@~JA28x0?#XrW+b#WG;#gY>J2e2{1UVA#A>3%!LDdNJ^pYA2X3OFbhyHmTnr z(Nc*u4inEFZY#$yyIGOC>$H^?s}1Swz~cncgE$hRQuQ_8VblV>OQ;%AlR^&(sEVYj zNn~#OPTJf%UcSR6WI>wqriSx8=cbBF|H|A5Txeu2#dTa|gV(G#}u1JTxTyQ)}xR z+80bN=-DlMp}VopCgyDc&1Qmc+tu(!K0tqrpV*v#R3u@Fe;sP77f_?g71l91v5RXt zPfD2p5!_f}RLW$_3;WzOHa`ylZAB7PyIG7&J5OCQZM6V|F7%r+aVe}G zW}b|&bB|Fo<$kXEK7+y&)DVqNIh&Iy6L;^4J{Fkiqu!C~G(Bg>vG`Avl0%oo(cF0R z-PqU{I&Q%F5p!+Nz9E}_>YKSvqifGM;?PLESnengk6{Y`>H_1&nXnxc{T~bK(%gLO z=FLN}vV-@+%L5mO8EHvk4A_t3qkYgfl1s1H#US&m=t9^6e=a$f`PgO3@|8Q*G3z$D z!eq4Z{eXNv%`S}z{Z}oi*gzXnHtt>9`N~Rfuaa!0GCPgB2E%1f$DM~o=brmhSqW>?~^bJR4> zBpeLGjb8@MIdlI^C6N9QbMxrJ#Q=nr%ZA&j9YT~>wiLTf8#pB?!~F%*t_Ch8$f*A* zk9AY8>1dX>UrX8lA6v=H_z9nNe*N|IZ0x(^B(Op`qs9Wphr%A9d%jZgc8r8crDCv| zVDD40geV9Zap3wA0~#u+i*zmvl#h)zSw27Mb;Cp?PIaub*{`mxb*{g8%0VS^Jp-TN`Z93T!Ty4>(OVJ)8cUZPd*XylJYtvK z+A=+*VT=1Jl_qi>Mpd7EChkp{dAg}wOxB{mrB}EA#e$MVbJ@pgeAs1m0m(YuCUjx} z5?}(e94B%(bJxuFXwcRz3jN)=6UJCyUZ0p)gS>S9%4a1`JxcBlv2wAjN z%?yV(ipAci(S=8$gieNZC0%c}&$iQ^*>(o_>Zc86+ z+PHBMb-b(zn(@2d{!1UD*mr=c}qrQfk#5ju71w00{*}-lkyCxV$ee?`JG3XPe>NA%G9l|cj_emSQK&= zz26vZtlw>u2uKUDbR2C=YE>Tvu4;@S>oiVt9H|^+R7t1CI(I`}{4)THE@(ysw!)|Z ziWfzOaJpGNR8OXx?pBP-nv=EKQ4XQ1_>*6s?;sv3!flnh8m+M?I#frv*mgk?u*G`hJk!9DdTOmU~$@pde&avHa)$Cu3t{o_H-pNe-b4HcLd#!xL z6ic+b)EwJ9| zk%Ch}wd0tUoZKASIqjd{FZ0sbz}LI{K>=W9&Zt21orEINNVzvHKEQLfwFv1vrRESPU5NP1~(Kgyi z`zJr}gAa^bZu}{rh0I5pHa9Udhz8d4AeTejyErMCGXC)P_K1iGNjq5l6W zOhLHS#F(J4@8zAT6{*(<95^oo1|j zcnB4&A4DG7jESOch9g=2&QjdGoEZI*nH(rAW5j?{8Gl~2*}&y>41361h|D`=19w6^ z5{1SjoH4dJ8G*vq^SyVqyL2c9npsT8I=$WVfH29P+tGocOdQ_tzHNWkCnoYy~ybfprp&1B)Z% zlN{WeeQQHBG*|;IwJZz?Bx<}{M%9wQHYZnA5(hZ`DLbl`oY76Qio8ZDl@`7KGIm{m zTB=j&{xjO{dnud5dXwR@s998h_>PdP#b8$ACi$@Ai{JKhg|AB5h<)wCw`^kSH0>IL z^kC21LvPCBlCSAwa3}@yjRM8Z$QHc`xOxl>m%42C_ICDm>v`Q0)O~x*cRHB?<%`>) zZt1?lk7s*AHNNf6%{)_A%%?4Wsjc_l z(d&M<%9!WYcfQuC?!WbkHN(PmLqgq8(fu)c-+0}w`05$Gn8H^l-^-`{!VX8ZUjm+Z zFbBfIxXBar);GJ5#?Ax2)(8Cbcf&P$-!(WRR{Gsgouot^);kwC7;#6`r}BO0Z12re z&M537kN@K<_R0^dE!r)4Up;$ZME?Kh7pVL>=k;DJ~8Q%F_WTX~;{QOA%-d#E>^6zb3W;h+)Z*=Ipx76Je7RNnm zH8jRiE4U-3|G9hm^ex$=ji(oGD7JgtS5#y@!kgJ~nMcsV$MJ)@oT8uR?&G+tH;r}8 z=`E#C8-I_93;6o<nV~CHCd(i7Lj6bb1oy0b+^(6CG^vu;O?tXJ$yf?b<#r|%5+q_em+u*dzLLa*1RD7mPU~o^7 zNsG-uk%_qT+?x<)i3}%v*L+X9{6haaUVzr9`Z*aDb#dg`C{Dr9?*863uARRjLCeTT z7+b%q%b}F;hE2zQ|5Q)0VvS9yWxP$TWsS{{W4MrQx$(g0Tb=pG<;E99>=HZ)eaaXi ztFfCdgs5NcqGH9_*8{F_1t=s7hzVvWaME=_rIw>jie(yEDU z=Cy!6`!BzZ+LS2P!{b-O{aC+!!m#h&l3In`ctGdrA0vIvrUt)h=60vv!xy!%$T#@z zuWeKI1t0CK^yOA4iMtMqFIC$l(i@bc_qz1been6cY4f|eyai$<78cW9MAMIOm zRtS)nD%L1^)ULkP@Zt$i#q~0*4{yyYoMX%aJk|xssj z&-CQ$Rml1OuuYy|TFW_uhF-jbPL2`|9G( z6Wo)M%hQXs)LYg|A?fX@F{1qTl2n|e2a(z1TWmv`k3YQ_ezC;q`)kgOTQ7c&q-UVb zujXF|1C)+NtPP*!Wk}f_%6hV`Ib6)A(-86vT)Jzq#0(8E}?0IdDPs{L;aexJ9M_iw3I7=}m?zr(Y= zcU{P9T5+4`O047SWa1|a!hr2Ow-#f6K6O!D{5q`xZEkc1{C2(Mf}r{IUS?9W;S@3X$&7Q=e?9&whkM{I}xM)PlILwKv{!hPT| ztm{Q5+^-su+CnZ!csTk_Y~MJR!ILFJ5SjNFB(BfYZMEMz${aCC*{X=7KSsOPN(0*i zE{3kqoJqj+{?@R?Wa;C<%lJuWtpVF&!}L44x%p}hzDj$fP0QhOAK#T1tZBacyNKa& zGoPn55fNqz#_~tLGYpLxeEkk|x z31O7>OHX>)LsLVg1wf)=cgSMl7H~#SFm~RWS82PA0#)LQ_Z)1x|$R>hqo}A9S=Gf3Mn`(Tg zy(@NSHAW#(h>NLgL4Mr>YDEvxVB#nC1>}%qYe6xUugT{8!l8T%GPZ}Ecl|RPWnDLqC>-3{TZYN|7Bb$ zS2$x7E>VyZOFtJ4POoC1I#t>oHJIS*=t*4*ATQLi;!{!?It$;wIPXhYZZPURB2^!& z=eN~6ww;^X>l0rdd&5VUvgLnNU~T+ztkCild8=ogF$v{0+d=*|z~nUb(qg9e*v?oia#dp&17dLx8>=SXnKzR zSlQYGlPQd;nDFF@w;#2Q+=eJscgcNmTfllYh+IaLI?;Yqdehx?gxJ`Ztp^XGmE@@K zir({TOOlg{62Zmb)hQ1NDshpOk4)Zm@{I_EXXG^SHmlzcUtjCrua6xTw3z*iH6e^` z_+jdK62(l5SCU%J!`~L-<#!cTy;iNi|0O(IO@lK!@rh}MVp0S|UR3qX?!#zzF++hiL-fFehYPv}!ePoqRP! z>4hv|c2&9}-E%pCt(7X}Y_ui)T_Rb>o@&pUOiWN2d0ncMSgm9K!u*2pM%~L~Wr*#) z846ufb@uW%>_<9NdgzBA zhYz4J`yrAdqr_rsU-zam%SyYc$QwrjEeDFtFs6N3Dm-5URZ#U{Z9yV}d4+?Ft0 zqG}-J_6?u8L6))GNfvbS!pg60-}6ll=c^J3j?2?B(IeKc>WRqjBO6 zw-H#RBPh+aXJhEH8F0$#h~h<25p;1YM||FZFU@bg<)8&S1;RkSpzp@L+`RoGuj5Y` z>Xi{=kQhT9+=WB;_E}1kCkv!s;?b2Oz#C`>E}65-t+TO6tNt< z96jc0)K$CXr)D4}x^3vEp>q;lJa4XNzSR*+`j{`uH_-Cg&42o}*YZw6s)6*0**c9} z&D=60+EirG+|l`x_AUv0=d;6_I(sKv(TPI7-FDeW{k9|6S}BvHIl0!otnykpCDk{mg@Lg4XHk+7}Ksiopg8U z*!rH?cN|!$?a)%oQ4zpK;KpdfZY<6kEwR8Q{RlSq_IEeea|s2VER*6_6bB|BrkC%3 z5cF$(A*vs(!djcGa%Zyr=T5yevr$*eBFoW}Oaj;Z{iqx2{n_DRMEcfbVzn@qydTTf zdJjIF(J9i=Y&*h^z9?*mxrMEbF}81r9H*DQ9$#vkd>LDp;K1q=lemq##xPDM)NUg+~W))vLT&uP)kQ>dsO_6O5`Za3sXR;L4 z*X|DytA1`yqqX%sh(nYo?e=RQ1eH0^835U5dG#`N0)w>{YOg=p)`*^YyT9Eo+Cb{m z=#i#9|Mk$El&qQI7jQ+s7Y8wMq|82vuQ z{~g=jh)2@HT~CGEA?Adi@Z0T`bfJ!4K<%c=`LDB1J)6`IuiF}tfBqvQvOam>`6I+g z)8W0vGaOY@_-J+U2Zxvqre5xmNd)(t2R(W>5 z-iMpHi*Y38^vAWDb_yqo)T&&(-X)!~me_e-lGrnfhViaESRmE}Xt zOL(kJNboTC=-STd*-t-Tp6p1l4DZEGP8QEZ>1m4p7i#GJMTjO0RR5QQH#mtd-xRyg{MUAbmj}W?Yb6+5vb7qLewzY!)bOp z6SbdAp5{cM!CttTFCI)R-F3kOi}U8|@9(byJ8@cNk2W1^nOfU?LEni4h9wDGjrlK{ zHJ0I=GyL1*k(|V;t7@FeZ47=ZFZ8`vn=B`4J<{(WSvwLcISxF1!GUS!Q2;g;M$*eJ%O2{S3>D%iki5eM~h9}N2U3` zrG}nj+dXv+4Gr-=;5lBOS({+OnthSSS$t{7;S&dqIw2%~jC1zCX&Efc4$X z%?1)A{SM6}o@(4aFp1o8U`YfXHa;ao3Vy$#;eeosK$7}#4#l4OUQNqE%iL08t%h#7 zZE~=vZT$K8@=ozh0(Rpjl8YNJ#so2oNt(#g<34Y{LP!7so0Ydgtb*d`VzW%8VV{ce z;!$#{&)yb~6yn(6rG19xhQ0&t4jVM`lfu?*=^A=1mDTQ!5Ioj{MFl+8(%8`OY;hH1 zY@K@La^a`q%<9aU%YU*6qWhxtPg(*=~TcXKdnvcpuf8F^Wq$`{~$N_&`{c+*IB!67d(!>ArC)y1B zpV|0-Y8%;F^K=hwMSwJwr0h&(7ZemYUn^{$A1SjIcUe%M|DCRWWi0fMs^(xOe0sE@ z9Bj?>JI{ohkr3lN_vKxWF>S)FV{=lj1;`yeWS#5J>U$IZyQhDADy%xyd`j?PqtpCA zzFzvBLp!&fP(L*m-(1K_b)59s)(}5=aQ8!A6Hc|AOS4^x@oZr^rvfF&E7QXk7G^jp zx6WQ=DzC(1;hpq5Kkaxq&^1_OXq3tFrp zCV9-KM{_g(LK_|6mjp;J3+4Lq?{Pa?4!3vtSe6b`up#r z_6oh>_gZS4{4b7r2U|l5kEi5Bam7X+1+&G(*M{X@^e? zPs!R}XOY4zEG+ah{^#$%7mh8ci~oHAKL;caoYs$bu3bf9>W|k`f&UkO8u(8*rN`<&)Rj6B0RV-<(T#d*z4 zKpG(f;!M>>kG#|8%l@Wc8=qPBq@kN0(Wb62oGVZE>OBtNCB4ZG=~uHQoet5FGcSrc zn$nBUz4cy{&C)FE?5_1#ckH;)GX3WnrTgo%oz{7yIU2bNiQ>Wl1KV5%4WfZu^lzvSy){Owh% z$S50sy*4+tKxubNF$5(&Y+E6NZ`gTM+^f_Y>Kmc&?VyS^6mYTX^uY#*1YGf$4x5fp z!-&{oUZ0Uq7Pe2asj*$_kuTde=+*B#KlSEv>*;%J_~hhEUN*&qf>r`{P#RZO)|;o} zI33n{!6G6giZ@)`1;c1~%}3fq*0Eos^))Al#NwO966H0b-{8c(2H$j7ap(KeJx&pyc^MtWnp^sUTS7%dEaT#;&m0OKnF* zLQxd=F6q5R+X;|kOt2@dn(Ed;d8-L{0$qSgPAvdq!ll^={q_&0@s|f`j zFj3LsILIp?dsjrJko@&1>OR=Hs)k0{%1)`h_Y_mr=78S%gcp$=%~$#L`69r69!c4Q zP5<rd+kjSYI?9?hH(s*=%rmNn7&n`ev0grO zrO7-#(l<#;qG^|qIbOB!S!jTPi)%TTJWl&Q>U;D1}9m+Rfgpq z)K-Qx@XBXnfFzNY)49W)?wXh zNwe`Xm=wrcn)4yovfXDQwF20hmZ96iMBpp0yYL01#5DN28eX3rc@zf~;?=p- z&;rEnk^T0>2An4k5W^}$c4O|8y6@*;alIdGERTD^MTqc#-rEc@aWG_Pb8)!DdXf5q zLHZhO%EA7)czOHsjUN?zg{*1SLC}qf|q%!~j8ZvhTY=du6 zr^x8_&FWnUE(U#&8~!S4rw_Mw=W1cEpdAKY_IQ^6tp(7rh}9W>6i7tQ>;Fs9yTZ}u}(C_2WkMyqQ?Ixi>G?r)_O^BG{?zmS*E zAIJ^|voC$DGNQ8{t}KT?D>GlBJZRf}<$`EIDbq}-pZ>^&QiGZ_%ig#>Lk(N!W&M#O zPVXhp$^cK>nuc!8(vUexgLQbh3o#{J4bJ z#+ROueEI6->hwXKFpq+K8%xiP`?4WpVirjrv&C9Jy_My!-+5F3pkihOT?k5n3s3@V z4rNU~g(`arngT8&^q-*^AJx3hSO|+F4fmOcNUnVz^P}zy57e!EIMEC10^5Q+U%Kq+ zIP4)Yfa*wCFb`K0X&tsmPOO;pl}N<%%R=jl#ECkmxp)2xk zCAP_3o z+6hG|v3TW0Jd6V<6k}88vNjvvejbn6_ZELIq_bhbcmH=q%pH0z_SpJ$r6reSpYo0B z3D3X^QEF=u36Ek-oXqG_C3Mib5698bd zky6Vl@Zm^>wIfcL#|h=Ku0PsPg7|h8pN($GtsxUcV9`@({E@8{7$%K@mYsb zxzFi3bKm^KrF}5%eDc*Udg{`?-U7~#p$O=axUg`JNbJ?E;HxXQ)!P$0fl)*4JX~Fi z;+4k|u*n@%)a=XFoc2dL3wa$LhUf2Ha=06i^5o_v`WCz-%t^V%F42WRI-xy^({4P^ z_NPzbr=JEKDL<7{b_x6n7*7ka^M$KZEqI7?ln#@jLgRM9gqKV7%;G}5*4jI{DEx
k#N(NJ_APS^TFTFR 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%0AD1_IM0K*vb1yk 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

*2S$#X`?f%6}mPBF78Gy>> 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

C3-IQWo`qf+X<5rGC{g2 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 literal 0 HcmV?d00001 diff --git a/third-party/openamp/doc/img/rproc-lcm-state-machine.png b/third-party/openamp/doc/img/rproc-lcm-state-machine.png new file mode 100644 index 0000000000000000000000000000000000000000..7e8a9d25a1c6722cf0a97a55aa5950cb69554f4f GIT binary patch literal 25547 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 Configured | Configure the remote to make it able to load application;
`remoteproc_configure(&rproc, &config_data)`| +| Configured -> Ready | load firmware ;
`remoteproc_load(&rproc, &path, &image_store, &image_store_ops, &image_info)` | +| Ready -> Running | start the processor;
`remoteproc_start(&rproc)` | +| Ready -> Stopped | stop the processor;
`remoteproc_stop(&rproc)`;
`remoteproc_shutdown(&rproc)`(Stopped is the intermediate state of shutdown operation) | +| Running -> Stopped | stop the processor;
`remoteproc_stop(&rproc)`;
`remoteproc_shutdown(&rproc)` | +| Stopped -> Offline | shutdown the processor;
`remoteproc_shutdown(&rproc)` | + +## Remote User APIs +* Initialize remoteproc instance: + ``` + struct remoteproc *remoteproc_init(struct remoteproc *rproc, + const struct remoteproc_ops *ops, void *priv) + ``` +* Release remoteproc instance: + ``` + int remoteproc_remove(struct remoteproc *rproc) + ``` +* Add memory to remoteproc: + ``` + void remoteproc_add_mem(struct remoteproc *rproc, struct remoteproc_mem *mem) + ``` +* Get memory libmetal I/O region from remoteproc specifying memory name: + ``` + struct metal_io_region *remoteproc_get_io_with_name(struct remoteproc *rproc, const char *name) + ``` +* Get memory libmetal I/O region from remoteproc specifying physical address: + ``` + struct metal_io_region *remoteproc_get_io_with_pa(struct remoteproc *rproc, metal_phys_addr_t pa); + ``` +* Get memory libmetal I/O region from remoteproc specifying virtual address: + ``` + struct metal_io_region *remoteproc_get_io_with_va(struct remoteproc *rproc, void *va); + ``` +* Map memory and add the memory to the remoteproc instance: + ``` + void *remoteproc_mmap(struct remoteproc *rproc, + metal_phys_addr_t *pa, metal_phys_addr_t *da, + size_t size, unsigned int attribute, + struct metal_io_region **io); + ``` +* Set resource table to remoteproc: + ``` + int remoteproc_set_rsc_table(struct remoteproc *rproc, + struct resource_table *rsc_table, + size_t rsc_size) + ``` +* Configure the remote presented by the remoteproc instance to make it able + to load application: + ``` + int remoteproc_config(struct remoteproc *rproc, void *data) + ``` +* Load application to the remote presented by the remoteproc instance to make + it ready to run: + ``` + int remoteproc_load(struct remoteproc *rproc, const char *path, + void *store, const struct image_store_ops *store_ops, + void **img_info) + ``` +* Run application on the remote presented by the remoteproc instance: + ``` + int remoteproc_start(struct remoteproc *rproc) + ``` +* Stop application on remote presented by the remoteproc instance: + ``` + int remoteproc_stop(struct remoteproc *rproc) + ``` +* Shutdown the remote presented by the remoteproc instance: + ``` + int remoteproc_shutdown(struct remoteproc *rproc) + ``` +* Create virtio device from the resource table vdev resource, and add it to the + remoteproc instance: + ``` + struct virtio_device *remoteproc_create_virtio(struct remoteproc *rproc, + int vdev_id, unsigned int role, + void (*rst_cb)(struct virtio_device *vdev)) + ``` +* Remove virtio device from the remoteproc instance: + ``` + void remoteproc_remove_virtio(struct remoteproc *rproc, + struct virtio_device *vdev) + ``` + + diff --git a/third-party/openamp/doc/rpmsg-design.md b/third-party/openamp/doc/rpmsg-design.md new file mode 100644 index 000000000..2c80afb01 --- /dev/null +++ b/third-party/openamp/doc/rpmsg-design.md @@ -0,0 +1,160 @@ +# RPMsg Design Document +RPMsg is a framework to allow communication between two processors. +RPMsg implementation in OpenAMP library is based on virtio. It complies +the RPMsg Linux kernel implementation. It defines the handshaking on +setting up and tearing down the communication between applications +running on two processors. + +## RPMsg User API Flow Chats +### RPMsg Static Endpoint +![Static Endpoint](img/coprocessor-rpmsg-static-ep.png) +### Binding Endpoint Dynamically with Name Service +![Binding Endpoint Dynamically with Name Service](img/coprocessor-rpmsg-ns.png) +### Creating Endpoint Dynamically with Name Service +![Creating Endpoint Dynamically with Name Service](img/coprocessor-rpmsg-ns-dynamic.png) + +## RPMsg User APIs +* RPMsg virtio driver to initialize the shared buffers pool(RPMsg virtio device + doesn't need to use this API): + ``` + void rpmsg_virtio_init_shm_pool(struct rpmsg_virtio_shm_pool *shpool, + void *shbuf, size_t size) + ``` +* Initialize RPMsg virtio device: + ``` + int rpmsg_init_vdev(struct rpmsg_virtio_device *rvdev, + struct virtio_device *vdev, + rpmsg_ns_bind_cb ns_bind_cb, + struct metal_io_region *shm_io, + struct rpmsg_virtio_shm_pool *shpool) + ``` +* Deinitialize RPMsg virtio device: + ``` + void rpmsg_deinit_vdev(struct rpmsg_virtio_device *rvdev)` + ``` +* Get RPMsg device from RPMsg virtio device: + ``` + struct rpmsg_device *rpmsg_virtio_get_rpmsg_device(struct rpmsg_virtio_device *rvdev) + ``` +### RPMsg virtio endpoint APIs +* Create RPMsg endpoint: + ``` + int rpmsg_create_ept(struct rpmsg_endpoint *ept, + struct rpmsg_device *rdev, + const char *name, uint32_t src, uint32_t dest, + rpmsg_ept_cb cb, rpmsg_ns_unbind_cb ns_unbind_cb) + ``` +* Destroy RPMsg endpoint: + ``` + void rpmsg_destroy_ept(struct rpsmg_endpoint *ept) + ``` +* Check if the local RPMsg endpoint is binded to the remote, and ready to send + message: + ``` + int is_rpmsg_ept_ready(struct rpmsg_endpoint *ept) + ``` +### RPMsg messaging APIs +* Send message with RPMsg endpoint default binding: + ``` + int rpmsg_send(struct rpmsg_endpoint *ept, const void *data, int len) + ``` +* Send message with RPMsg endpoint, specify destination address: + ``` + int rpmsg_sendto(struct rpmsg_endpoint *ept, void *data, int len, + uint32_t dst) + ``` +* Send message with RPMsg endpoint using explicit source and destination + addresses: + ``` + int rpmsg_send_offchannel(struct rpmsg_endpoint *ept, + uint32_t src, uint32_t dst, + const void *data, int len) + ``` +* Try to send message with RPMsg endpoint default binding, if no buffer + available, returns: + ``` + int rpmsg_trysend(struct rpmsg_endpoint *ept, const void *data, + int len) + ``` +* Try to send message with RPMsg endpoint, specify destination address, + if no buffer available, returns: + ``` + int rpmsg_trysendto(struct rpmsg_endpoint *ept, void *data, int len, + uint32_t dst) + ``` +* Try to send message with RPMsg endpoint using explicit source and destination + addresses, if no buffer available, returns: + ``` + int rpmsg_trysend_offchannel(struct rpmsg_endpoint *ept, + uint32_t src, uint32_t dst, + const void *data, int len)` + ``` + +* Hold the rx buffer for usage outside the receive callback: + ``` + void rpmsg_hold_rx_buffer(struct rpmsg_endpoint *ept, void *rxbuf) + ``` + +* Release the rx buffer held thanks to the rpmsg_hold_rx_buffer() function: + ``` + void rpmsg_release_rx_buffer(struct rpmsg_endpoint *ept, void *rxbuf) + + ``` +* Gets the tx buffer for message payload. + ``` + void *rpmsg_get_tx_payload_buffer(struct rpmsg_endpoint *ept, + uint32_t *len, int wait) + ``` + +* Using a buffer obtained by calling the rpmsg_get_tx_payload_buffer() function, + Send a message with the RPMsg endpoint default binding: + ``` + int rpmsg_send_nocopy(struct rpmsg_endpoint *ept, + const void *data, int len) + ``` + +* Using a buffer obtained by calling the rpmsg_get_tx_payload_buffer() function, + send a message with RPMsg endpoint, specifying the destination address: + ``` + int rpmsg_sendto_nocopy(struct rpmsg_endpoint *ept, + const void *data, int len, uint32_t dst) + ``` + +* Using a buffer obtained by calling the rpmsg_get_tx_payload_buffer() function, + send a message with RPMsg endpoint using explicit source and destination addresses: + ``` + int rpmsg_send_offchannel_nocopy(struct rpmsg_endpoint *ept, uint32_t src, + uint32_t dst, const void *data, int len) + ``` + +* Releases unused Tx buffer reserved by rpmsg_get_tx_payload_buffer() function: + ``` + int rpmsg_release_tx_buffer(struct rpmsg_endpoint *ept, void *txbuf) + ``` + +## RPMsg User Defined Callbacks +* RPMsg endpoint message received callback: + ``` + int (*rpmsg_ept_cb)(struct rpmsg_endpoint *ept, void *data, + size_t len, uint32_t src, void *priv) + ``` +* RPMsg name service binding callback. If user defines such callback, when + there is a name service announcement arrives, if there is no registered + endpoint found to bind to this name service, it will call this callback. + If this callback is not defined, it will drop this name service.: + ``` + void (*rpmsg_ns_bind_cb)(struct rpmsg_device *rdev, + const char *name, uint32_t dest) + ``` +* RPMsg name service unbind callback. If user defines such callback, when + there is name service destroy arrives, it will call this callback.: + ``` + void (*rpmsg_ns_unbind_cb)(struct rpmsg_device *rdev, + const char *name, uint32_t dest) + ``` +* RPMsg endpoint name service unbind callback. If user defines such callback, + when there is name service destroy arrives, it will call this callback to + notify the user application about the remote has destroyed the service.: + ``` + void (*rpmsg_ns_unbind_cb)(struct rpmsg_endpoint *ept) + ``` diff --git a/third-party/openamp/lib/include/internal/utilities.h b/third-party/openamp/lib/include/internal/utilities.h new file mode 100644 index 000000000..bedee9bec --- /dev/null +++ b/third-party/openamp/lib/include/internal/utilities.h @@ -0,0 +1,35 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * + * Copyright (c) 2024, STMicroelectronics + * + */ + +#include + +/** + * @internal + * + * @brief Copies a string to a destination buffer with size limitation and returns the length of + * the destination string. + * + * This function copies up to `s_size - 1` characters from the source string `src` + * to the destination buffer `dst`, ensuring that the destination buffer is + * null-terminated. The function returns the length of the `dst` string. + * If the length of `src` string is greater than or equal to `d_size`, the destination + * buffer will be truncated. + * + * @param dst Destination buffer where the string will be copied. + * @param d_size Size of the destination buffer. + * @param src Source string to be copied. + * @param s_size Size of the source buffer. + * @return The length of the string contained in the `dst` buffer. + * + * @note If the size of the destination buffer is 0, the function does not copy any characters and + * the destination buffer is not null-terminated. + * @note The function ensures that the destination buffer is always null-terminated if `size` is + * greater than 0. + * @note The function ensures that no data is read past the end of the 'src' buffer. + */ +size_t safe_strcpy(char *dst, size_t d_size, const char *src, size_t s_size); + diff --git a/third-party/openamp/lib/include/openamp/virtio_mmio.h b/third-party/openamp/lib/include/openamp/virtio_mmio.h new file mode 100644 index 000000000..0ba34d2bb --- /dev/null +++ b/third-party/openamp/lib/include/openamp/virtio_mmio.h @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2022 Wind River Systems, Inc. + * Based on Virtio PCI driver by Anthony Liguori, copyright IBM Corp. 2007 + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef OPENAMP_VIRTIO_MMIO_H +#define OPENAMP_VIRTIO_MMIO_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Enable support for legacy devices */ +#define VIRTIO_MMIO_LEGACY + +/* Control registers */ + +/* Magic value ("virt" string) - Read Only */ +#define VIRTIO_MMIO_MAGIC_VALUE 0x000 + +#define VIRTIO_MMIO_MAGIC_VALUE_STRING ('v' | ('i' << 8) | ('r' << 16) | ('t' << 24)) + +/* Virtio device version - Read Only */ +#define VIRTIO_MMIO_VERSION 0x004 + +/* Virtio device ID - Read Only */ +#define VIRTIO_MMIO_DEVICE_ID 0x008 + +/* Virtio vendor ID - Read Only */ +#define VIRTIO_MMIO_VENDOR_ID 0x00c + +/* + * Bitmask of the features supported by the device (host) + * (32 bits per set) - Read Only + */ +#define VIRTIO_MMIO_DEVICE_FEATURES 0x010 + +/* Device (host) features set selector - Write Only */ +#define VIRTIO_MMIO_DEVICE_FEATURES_SEL 0x014 + +/* + * Bitmask of features activated by the driver (guest) + * (32 bits per set) - Write Only + */ +#define VIRTIO_MMIO_DRIVER_FEATURES 0x020 + +/* Activated features set selector - Write Only */ +#define VIRTIO_MMIO_DRIVER_FEATURES_SEL 0x024 + +#ifndef VIRTIO_MMIO_NO_LEGACY /* LEGACY DEVICES ONLY! */ +/* Guest's memory page size in bytes - Write Only */ +#define VIRTIO_MMIO_GUEST_PAGE_SIZE 0x028 +#endif + +/* Queue selector - Write Only */ +#define VIRTIO_MMIO_QUEUE_SEL 0x030 + +/* Maximum size of the currently selected queue - Read Only */ +#define VIRTIO_MMIO_QUEUE_NUM_MAX 0x034 + +/* Queue size for the currently selected queue - Write Only */ +#define VIRTIO_MMIO_QUEUE_NUM 0x038 + +#ifdef VIRTIO_MMIO_LEGACY +/* Used Ring alignment for the currently selected queue - Write Only */ +#define VIRTIO_MMIO_QUEUE_ALIGN 0x03c +/* Guest's PFN for the currently selected queue - Read Write */ +#define VIRTIO_MMIO_QUEUE_PFN 0x040 +#endif + +/* Ready bit for the currently selected queue - Read Write */ +#define VIRTIO_MMIO_QUEUE_READY 0x044 + +/* Queue notifier - Write Only */ +#define VIRTIO_MMIO_QUEUE_NOTIFY 0x050 + +/* Interrupt status - Read Only */ +#define VIRTIO_MMIO_INTERRUPT_STATUS 0x060 + +/* Interrupt acknowledge - Write Only */ +#define VIRTIO_MMIO_INTERRUPT_ACK 0x064 + +/* Device status register - Read Write */ +#define VIRTIO_MMIO_STATUS 0x070 + +/* Selected queue's Descriptor Table address, 64 bits in two halves */ +#define VIRTIO_MMIO_QUEUE_DESC_LOW 0x080 +#define VIRTIO_MMIO_QUEUE_DESC_HIGH 0x084 + +/* Selected queue's Available Ring address, 64 bits in two halves */ +#define VIRTIO_MMIO_QUEUE_AVAIL_LOW 0x090 +#define VIRTIO_MMIO_QUEUE_AVAIL_HIGH 0x094 + +/* Selected queue's Used Ring address, 64 bits in two halves */ +#define VIRTIO_MMIO_QUEUE_USED_LOW 0x0a0 +#define VIRTIO_MMIO_QUEUE_USED_HIGH 0x0a4 + +/* Shared memory region id */ +#define VIRTIO_MMIO_SHM_SEL 0x0ac + +/* Shared memory region length, 64 bits in two halves */ +#define VIRTIO_MMIO_SHM_LEN_LOW 0x0b0 +#define VIRTIO_MMIO_SHM_LEN_HIGH 0x0b4 + +/* Shared memory region base address, 64 bits in two halves */ +#define VIRTIO_MMIO_SHM_BASE_LOW 0x0b8 +#define VIRTIO_MMIO_SHM_BASE_HIGH 0x0bc + +/* Configuration atomicity value */ +#define VIRTIO_MMIO_CONFIG_GENERATION 0x0fc + +/* + * The config space is defined by each driver as + * the per-driver configuration space - Read Write + */ +#define VIRTIO_MMIO_CONFIG 0x100 + +/* Interrupt flags (re: interrupt status & acknowledge registers) */ +#define VIRTIO_MMIO_INT_VRING (1 << 0) +#define VIRTIO_MMIO_INT_CONFIG (1 << 1) + +/* Data buffer size for preallocated buffers before vring */ +#define VIRTIO_MMIO_MAX_DATA_SIZE 128 + +/** @brief VIRTIO MMIO memory area */ +struct virtio_mmio_dev_mem { + /** Memory region physical address */ + void *base; + + /** Memory region size */ + size_t size; +}; + +/** @brief A VIRTIO MMIO device */ +struct virtio_mmio_device { + /** Base virtio device structure */ + struct virtio_device vdev; + + /** Device configuration space metal_io_region */ + struct metal_io_region cfg_io; + + /** Pre-shared memory space metal_io_region */ + struct metal_io_region shm_io; + + /** VIRTIO device configuration space */ + struct virtio_mmio_dev_mem cfg_mem; + + /** VIRTIO device pre-shared memory */ + struct virtio_mmio_dev_mem shm_mem; + + /** VIRTIO_DEV_DRIVER or VIRTIO_DEV_DEVICE */ + unsigned int device_mode; + + /** Interrupt number */ + unsigned int irq; + + /** Custom user data */ + void *user_data; +}; + +/** + * @brief Register a VIRTIO device with the VIRTIO stack. + * + * @param vdev Pointer to device structure. + * @param vq_num Number of virtqueues the device uses. + * @param vqs Array of pointers to vthe virtqueues used by the device. + */ +void virtio_mmio_register_device(struct virtio_device *vdev, int vq_num, struct virtqueue **vqs); + +/** + * @brief Setup a virtqueue structure. + * + * @param vdev Pointer to device structure. + * @param idx Index of the virtqueue. + * @param vq Pointer to virtqueue structure. + * @param cb Pointer to virtqueue callback. Can be NULL. + * @param cb_arg Argument for the virtqueue callback. + * @param vq_name Name of the virtqueue. + * + * @return pointer to virtqueue structure. + */ +struct virtqueue *virtio_mmio_setup_virtqueue(struct virtio_device *vdev, + unsigned int idx, + struct virtqueue *vq, + void (*cb)(void *), + void *cb_arg, + const char *vq_name); + +/** + * @brief VIRTIO MMIO device initialization. + * + * @param vmdev Pointer to virtio_mmio_device structure. + * @param virt_mem_ptr Guest virtio (shared) memory base address (virtual). + * @param cfg_mem_ptr Virtio device configuration memory base address (virtual). + * @param user_data Pointer to custom user data. + * + * @return int 0 for success. + */ +int virtio_mmio_device_init(struct virtio_mmio_device *vmdev, uintptr_t virt_mem_ptr, + uintptr_t cfg_mem_ptr, void *user_data); + +/** + * @brief VIRTIO MMIO interrupt service routine. + * + * @param vdev Pointer to virtio_device structure. + */ +void virtio_mmio_isr(struct virtio_device *vdev); + +#ifdef __cplusplus +} +#endif + +#endif /* OPENAMP_VIRTIO_MMIO_H */ diff --git a/third-party/openamp/lib/remoteproc/rsc_table_parser.h b/third-party/openamp/lib/remoteproc/rsc_table_parser.h new file mode 100644 index 000000000..46f7dd8a5 --- /dev/null +++ b/third-party/openamp/lib/remoteproc/rsc_table_parser.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2014, Mentor Graphics Corporation + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef RSC_TABLE_PARSER_H +#define RSC_TABLE_PARSER_H + +#include + +#if defined __cplusplus +extern "C" { +#endif + +/** + * @internal + * + * @brief This function parses resource table. + * + * @param rproc Pointer to remote remoteproc + * @param rsc_table Resource table to parse + * @param len Size of rsc table + * @param io Pointer to the resource table I/O region + * It can be NULL if the resource table + * is in the local memory. + * + * @return Execution status + */ +int handle_rsc_table(struct remoteproc *rproc, + struct resource_table *rsc_table, size_t len, + struct metal_io_region *io); + +/** + * @internal + * + * @brief Find out location of a resource type in the resource table. + * + * @param rsc_table Pointer to the resource table + * @param rsc_type Type of the resource + * @param index Index of the resource of the specified type + * + * @return The offset to the resource on success, or 0 on failure + */ +size_t find_rsc(void *rsc_table, unsigned int rsc_type, unsigned int index); + +#if defined __cplusplus +} +#endif + +#endif /* RSC_TABLE_PARSER_H */ diff --git a/third-party/openamp/lib/utils/CMakeLists.txt b/third-party/openamp/lib/utils/CMakeLists.txt new file mode 100644 index 000000000..33fdf1339 --- /dev/null +++ b/third-party/openamp/lib/utils/CMakeLists.txt @@ -0,0 +1 @@ +collect (PROJECT_LIB_SOURCES utilities.c) diff --git a/third-party/openamp/lib/utils/utilities.c b/third-party/openamp/lib/utils/utilities.c new file mode 100644 index 000000000..97115e56e --- /dev/null +++ b/third-party/openamp/lib/utils/utilities.c @@ -0,0 +1,35 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * + * Copyright (c) 2024, STMicroelectronics + * + */ + +#include +#include +#include + +size_t safe_strcpy(char *dst, size_t d_size, const char *src, size_t s_size) +{ + size_t size = metal_min(s_size, d_size); + size_t nleft = size + 1; + char *d = dst; + + if (!d_size) + return 0; + + /* Copy as many bytes as will fit. */ + while (--nleft != 0) { + *dst = *src++; + if (*dst++ == '\0') + break; + } + + /* Fill last characters with '\0' */ + if (size < d_size) + memset(dst, '\0', d_size - size + nleft); + else + d[d_size - 1] = '\0'; + + return size - nleft; +} diff --git a/third-party/openamp/lib/virtio_mmio/CMakeLists.txt b/third-party/openamp/lib/virtio_mmio/CMakeLists.txt new file mode 100644 index 000000000..f25d00c66 --- /dev/null +++ b/third-party/openamp/lib/virtio_mmio/CMakeLists.txt @@ -0,0 +1,3 @@ +if (WITH_VIRTIO_MMIO_DRV) +collect (PROJECT_LIB_SOURCES virtio_mmio_drv.c) +endif (WITH_VIRTIO_MMIO_DRV) diff --git a/third-party/openamp/lib/virtio_mmio/virtio_mmio_drv.c b/third-party/openamp/lib/virtio_mmio/virtio_mmio_drv.c new file mode 100644 index 000000000..9f72f0fe0 --- /dev/null +++ b/third-party/openamp/lib/virtio_mmio/virtio_mmio_drv.c @@ -0,0 +1,363 @@ +/* + * Copyright (c) 2022 Wind River Systems, Inc. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include +#include +#include +#include +#include + +void virtio_mmio_isr(struct virtio_device *vdev); + +typedef void (*virtio_mmio_vq_callback)(void *); + +static int virtio_mmio_create_virtqueues(struct virtio_device *vdev, unsigned int flags, + unsigned int nvqs, const char *names[], + vq_callback callbacks[], void *callback_args[]); + +static inline void virtio_mmio_write32(struct virtio_device *vdev, int offset, uint32_t value) +{ + struct virtio_mmio_device *vmdev = metal_container_of(vdev, + struct virtio_mmio_device, vdev); + + metal_io_write32(&vmdev->cfg_io, offset, value); +} + +static inline uint32_t virtio_mmio_read32(struct virtio_device *vdev, int offset) +{ + struct virtio_mmio_device *vmdev = metal_container_of(vdev, + struct virtio_mmio_device, vdev); + + return metal_io_read32(&vmdev->cfg_io, offset); +} + +static inline uint8_t virtio_mmio_read8(struct virtio_device *vdev, int offset) +{ + struct virtio_mmio_device *vmdev = metal_container_of(vdev, + struct virtio_mmio_device, vdev); + + return metal_io_read8(&vmdev->cfg_io, offset); +} + +static inline void virtio_mmio_set_status(struct virtio_device *vdev, uint8_t status) +{ + virtio_mmio_write32(vdev, VIRTIO_MMIO_STATUS, status); +} + +static uint8_t virtio_mmio_get_status(struct virtio_device *vdev) +{ + return virtio_mmio_read32(vdev, VIRTIO_MMIO_STATUS); +} + +static void virtio_mmio_write_config(struct virtio_device *vdev, + uint32_t offset, void *dst, int length) +{ + (void)(vdev); + (void)(offset); + (void)(dst); + (void)length; + + metal_log(METAL_LOG_WARNING, "%s not supported\n", __func__); +} + +static void virtio_mmio_read_config(struct virtio_device *vdev, + uint32_t offset, void *dst, int length) +{ + int i; + uint8_t *d = dst; + (void)(offset); + + for (i = 0; i < length; i++) + d[i] = virtio_mmio_read8(vdev, VIRTIO_MMIO_CONFIG + i); +} + +static uint32_t _virtio_mmio_get_features(struct virtio_device *vdev, int idx) +{ + uint32_t hfeatures; + + /* Writing selection register VIRTIO_MMIO_DEVICE_FEATURES_SEL. In pure AMP + * mode this needs to be followed by a synchronization w/ the device + * before reading VIRTIO_MMIO_DEVICE_FEATURES + */ + virtio_mmio_write32(vdev, VIRTIO_MMIO_DEVICE_FEATURES_SEL, idx); + hfeatures = virtio_mmio_read32(vdev, VIRTIO_MMIO_DEVICE_FEATURES); + return hfeatures & vdev->features; +} + +static uint32_t virtio_mmio_get_features(struct virtio_device *vdev) +{ + return _virtio_mmio_get_features(vdev, 0); +} + +/* This is more like negotiate_features */ +static void _virtio_mmio_set_features(struct virtio_device *vdev, + uint32_t features, int idx) +{ + uint32_t hfeatures; + + /* Writing selection register VIRTIO_MMIO_DEVICE_FEATURES_SEL. In pure AMP + * mode this needs to be followed by a synchronization w/ the device + * before reading VIRTIO_MMIO_DEVICE_FEATURES + */ + virtio_mmio_write32(vdev, VIRTIO_MMIO_DEVICE_FEATURES_SEL, idx); + hfeatures = virtio_mmio_read32(vdev, VIRTIO_MMIO_DEVICE_FEATURES); + features &= hfeatures; + virtio_mmio_write32(vdev, VIRTIO_MMIO_DRIVER_FEATURES, features); + vdev->features = features; +} + +static void virtio_mmio_set_features(struct virtio_device *vdev, uint32_t features) +{ + _virtio_mmio_set_features(vdev, features, 0); +} + +static void virtio_mmio_reset_device(struct virtio_device *vdev) +{ + virtio_mmio_set_status(vdev, 0); +} + +static void virtio_mmio_notify(struct virtqueue *vq) +{ + /* VIRTIO_F_NOTIFICATION_DATA is not supported for now */ + virtio_mmio_write32(vq->vq_dev, VIRTIO_MMIO_QUEUE_NOTIFY, vq->vq_queue_index); +} + +const struct virtio_dispatch virtio_mmio_dispatch = { + .create_virtqueues = virtio_mmio_create_virtqueues, + .get_status = virtio_mmio_get_status, + .set_status = virtio_mmio_set_status, + .get_features = virtio_mmio_get_features, + .set_features = virtio_mmio_set_features, + .read_config = virtio_mmio_read_config, + .write_config = virtio_mmio_write_config, + .reset_device = virtio_mmio_reset_device, + .notify = virtio_mmio_notify, +}; + +static int virtio_mmio_get_metal_io(struct virtio_device *vdev, uintptr_t virt_mem_ptr, + uintptr_t cfg_mem_ptr) +{ + struct virtio_mmio_device *vmdev = metal_container_of(vdev, + struct virtio_mmio_device, vdev); + + /* Setup shared memory region */ + metal_io_init(&vmdev->shm_io, (void *)virt_mem_ptr, + (metal_phys_addr_t *)&vmdev->shm_mem.base, + vmdev->shm_mem.size, -1, 0, NULL); + + /* Setup configuration region */ + metal_io_init(&vmdev->cfg_io, (void *)cfg_mem_ptr, + (metal_phys_addr_t *)&vmdev->cfg_mem.base, + vmdev->cfg_mem.size, -1, 0, NULL); + + return 0; +} + +uint32_t virtio_mmio_get_max_elem(struct virtio_device *vdev, int idx) +{ + /* Select the queue we're interested in by writing selection register + * VIRTIO_MMIO_QUEUE_SEL. In pure AMP mode this needs to be followed by a + * synchronization w/ the device before reading VIRTIO_MMIO_QUEUE_NUM_MAX + */ + virtio_mmio_write32(vdev, VIRTIO_MMIO_QUEUE_SEL, idx); + return virtio_mmio_read32(vdev, VIRTIO_MMIO_QUEUE_NUM_MAX); +} + +int virtio_mmio_device_init(struct virtio_mmio_device *vmdev, uintptr_t virt_mem_ptr, + uintptr_t cfg_mem_ptr, void *user_data) +{ + struct virtio_device *vdev = &vmdev->vdev; + uint32_t magic, version, devid, vendor; + + vdev->role = vmdev->device_mode; + vdev->priv = vmdev; + vdev->func = &virtio_mmio_dispatch; + vmdev->user_data = user_data; + + /* Set metal io mem ops */ + virtio_mmio_get_metal_io(vdev, virt_mem_ptr, cfg_mem_ptr); + + magic = virtio_mmio_read32(vdev, VIRTIO_MMIO_MAGIC_VALUE); + if (magic != VIRTIO_MMIO_MAGIC_VALUE_STRING) { + metal_log(METAL_LOG_ERROR, "Bad magic value %08x\n", magic); + return -1; + } + + version = virtio_mmio_read32(vdev, VIRTIO_MMIO_VERSION); + devid = virtio_mmio_read32(vdev, VIRTIO_MMIO_DEVICE_ID); + if (devid == 0) { + /* Placeholder */ + return -1; + } + + if (version != 1) { + metal_log(METAL_LOG_ERROR, "Bad version %08x\n", version); + return -1; + } + + vendor = virtio_mmio_read32(vdev, VIRTIO_MMIO_VENDOR_ID); + metal_log(METAL_LOG_DEBUG, "VIRTIO %08x:%08x\n", vendor, devid); + + vdev->id.version = version; + vdev->id.device = devid; + vdev->id.vendor = vendor; + + virtio_mmio_set_status(vdev, VIRTIO_CONFIG_STATUS_ACK); + virtio_mmio_write32(vdev, VIRTIO_MMIO_GUEST_PAGE_SIZE, 4096); + + return 0; +} + +/* Register preallocated virtqueues */ +void virtio_mmio_register_device(struct virtio_device *vdev, int vq_num, struct virtqueue **vqs) +{ + int i; + + vdev->vrings_info = metal_allocate_memory(sizeof(struct virtio_vring_info) * vq_num); + /* TODO: handle error case */ + for (i = 0; i < vq_num; i++) { + vdev->vrings_info[i].vq = vqs[i]; + } + vdev->vrings_num = vq_num; +} + +struct virtqueue *virtio_mmio_setup_virtqueue(struct virtio_device *vdev, + unsigned int idx, + struct virtqueue *vq, + void (*cb)(void *), + void *cb_arg, + const char *vq_name) +{ + uint32_t maxq; + struct virtio_vring_info _vring_info = {0}; + struct virtio_vring_info *vring_info = &_vring_info; + struct vring_alloc_info *vring_alloc_info; + struct virtio_mmio_device *vmdev = metal_container_of(vdev, + struct virtio_mmio_device, vdev); + + if (vdev->role != (unsigned int)VIRTIO_DEV_DRIVER) { + metal_log(METAL_LOG_ERROR, "Only VIRTIO_DEV_DRIVER is currently supported\n"); + return NULL; + } + + if (!vq) { + metal_log(METAL_LOG_ERROR, + "Only preallocated virtqueues are currently supported\n"); + return NULL; + } + + if (vdev->id.version != 0x1) { + metal_log(METAL_LOG_ERROR, + "Only VIRTIO MMIO version 1 is currently supported\n"); + return NULL; + } + + vring_info->io = &vmdev->shm_io; + vring_info->info.num_descs = virtio_mmio_get_max_elem(vdev, idx); + vring_info->info.align = VIRTIO_MMIO_VRING_ALIGNMENT; + + /* Check if vrings are already configured */ + if (vq->vq_nentries != 0 && vq->vq_nentries == vq->vq_free_cnt && + vq->vq_ring.desc) { + vring_info->info.vaddr = vq->vq_ring.desc; + vring_info->vq = vq; + } + vring_info->info.num_descs = vq->vq_nentries; + + vq->vq_dev = vdev; + + vring_alloc_info = &vring_info->info; + + unsigned int role_bk = vdev->role; + /* Assign OA VIRTIO_DEV_DRIVER role to allow virtio guests to setup the vrings */ + vdev->role = (unsigned int)VIRTIO_DEV_DRIVER; + if (virtqueue_create(vdev, idx, vq_name, vring_alloc_info, (void (*)(struct virtqueue *))cb, + vdev->func->notify, vring_info->vq)) { + metal_log(METAL_LOG_ERROR, "virtqueue_create failed\n"); + return NULL; + } + vdev->role = role_bk; + vq->priv = cb_arg; + virtqueue_set_shmem_io(vq, &vmdev->shm_io); + + /* Writing selection register VIRTIO_MMIO_QUEUE_SEL. In pure AMP + * mode this needs to be followed by a synchronization w/ the device + * before reading VIRTIO_MMIO_QUEUE_NUM_MAX + */ + virtio_mmio_write32(vdev, VIRTIO_MMIO_QUEUE_SEL, idx); + maxq = virtio_mmio_read32(vdev, VIRTIO_MMIO_QUEUE_NUM_MAX); + VIRTIO_ASSERT((maxq != 0), + "VIRTIO_MMIO_QUEUE_NUM_MAX cannot be 0"); + VIRTIO_ASSERT((maxq >= vq->vq_nentries), + "VIRTIO_MMIO_QUEUE_NUM_MAX must be greater than vqueue->vq_nentries"); + virtio_mmio_write32(vdev, VIRTIO_MMIO_QUEUE_NUM, vq->vq_nentries); + virtio_mmio_write32(vdev, VIRTIO_MMIO_QUEUE_ALIGN, 4096); + virtio_mmio_write32(vdev, VIRTIO_MMIO_QUEUE_PFN, + ((uintptr_t)metal_io_virt_to_phys(&vmdev->shm_io, + (char *)vq->vq_ring.desc)) / 4096); + + vdev->vrings_info[vdev->vrings_num].vq = vq; + vdev->vrings_num++; + virtqueue_enable_cb(vq); + + return vq; +} + +void virtio_mmio_isr(struct virtio_device *vdev) +{ + struct virtio_vring_info *vrings_info = vdev->vrings_info; + + uint32_t isr = virtio_mmio_read32(vdev, VIRTIO_MMIO_INTERRUPT_STATUS); + struct virtqueue *vq; + unsigned int i; + + if (isr & VIRTIO_MMIO_INT_VRING) { + for (i = 0; i < vdev->vrings_num; i++) { + vq = vrings_info[i].vq; + if (vq->callback) + vq->callback(vq->priv); + } + } + + if (isr & ~(VIRTIO_MMIO_INT_VRING)) + metal_log(METAL_LOG_WARNING, "Unhandled interrupt type: 0x%x\n", isr); + + virtio_mmio_write32(vdev, VIRTIO_MMIO_INTERRUPT_ACK, isr); +} + +static int virtio_mmio_create_virtqueues(struct virtio_device *vdev, unsigned int flags, + unsigned int nvqs, const char *names[], + vq_callback callbacks[], void *callback_args[]) +{ + struct virtqueue *vq; + struct virtqueue *vring_vq; + void (*cb)(void *); + void *cb_arg; + unsigned int i; + + (void)flags; + + if (!vdev || !names || !vdev->vrings_info) + return -EINVAL; + + for (i = 0; i < nvqs; i++) { + vring_vq = NULL; + cb = NULL; + cb_arg = NULL; + if (vdev->vrings_info[i].vq) + vring_vq = vdev->vrings_info[i].vq; + if (callbacks) + cb = (virtio_mmio_vq_callback)callbacks[i]; + if (callback_args) + cb_arg = callback_args[i]; + vq = virtio_mmio_setup_virtqueue(vdev, i, vring_vq, cb, cb_arg, names[i]); + if (!vq) + return -ENODEV; + } + + return 0; +} diff --git a/third-party/openamp/openamp-system-reference/LICENSE.md b/third-party/openamp/openamp-system-reference/LICENSE.md new file mode 100644 index 000000000..580912eba --- /dev/null +++ b/third-party/openamp/openamp-system-reference/LICENSE.md @@ -0,0 +1,70 @@ +Software License Agreement (BSD 3-Clause License) +======================================== + +Copyright (c) 2014, Mentor Graphics Corporation. All rights reserved. +Copyright (c) 2015 - 2016 Xilinx, Inc. All rights reserved. +Copyright (c) 2016 Freescale Semiconductor, Inc. All rights reserved +Copyright (c) 2022 Advanced Micro Devices, Inc. All rights reserved + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +BSD 2-Clause License +------------------------- + +Copyright (c) . All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Notes +========================================= +Use the following tag instead of the full license text in the individual files: + + SPDX-License-Identifier: BSD-3-Clause + SPDX-License-Identifier: BSD-2-Clause + +This enables machine processing of license information based on the SPDX +License Identifiers that are here available: http://spdx.org/licenses/ + diff --git a/third-party/openamp/openamp-system-reference/README.md b/third-party/openamp/openamp-system-reference/README.md new file mode 100644 index 000000000..ef6983e54 --- /dev/null +++ b/third-party/openamp/openamp-system-reference/README.md @@ -0,0 +1,2 @@ +# openamp-system-reference +End-to-end system reference material showcasing all the different aspects of OpenAMP, on multiple vendor platforms. diff --git a/third-party/openamp/openamp-system-reference/examples/legacy_apps/README.md b/third-party/openamp/openamp-system-reference/examples/legacy_apps/README.md new file mode 100644 index 000000000..a527981c2 --- /dev/null +++ b/third-party/openamp/openamp-system-reference/examples/legacy_apps/README.md @@ -0,0 +1,66 @@ +# Summary + +This directory contains legacy applications and tests examples. +These applications were moved from open-amp repository. + + +# Initialization + +The first step is to initialize the workspace folder (``my-workspace``) where +the examples and all Zephyr modules will be cloned. You can do +that by running: + +```shell +# initialize my-workspace for the example-application (main branch) +west init -m https://github.com/OpenAMP/openamp-system-reference --mf examples/legacy_apps/west.yml --mr main my-workspace +# update modules +cd my-workspace +west update +``` + +# Build + +Following steps to build legacy apps on host machine. + +``` +export PROJECT_ROOT=$PWD +``` + +## Build libmetal +```shell + $ cd $PROJECT_ROOT/libmetal + $ cmake . -Bbuild -DCMAKE_INSTALL_PREFIX=$PROJECT_ROOT/target + $ make -C build VERBOSE=1 install +``` + +## Build open_amp +```shell + $ cd $PROJECT_ROOT/open-amp + $ cmake . -Bbuild -DCMAKE_INCLUDE_PATH=$PROJECT_ROOT/libmetal/build/lib/include/ -DCMAKE_LIBRARY_PATH=$PROJECT_ROOT/libmetal/build/lib/ -DCMAKE_INSTALL_PREFIX=$PROJECT_ROOT/target + $ make -C build VERBOSE=1 install +``` +## Build legacy Apps +```shell + $ cd $PROJECT_ROOT/openamp-system-reference/examples/legacy_apps + $ cmake -Bbuild \ +-DCMAKE_INCLUDE_PATH="$PROJECT_ROOT/libmetal/build/lib/include/;$PROJECT_ROOT/open-amp/build/lib/include/" \ +-DCMAKE_LIBRARY_PATH="$PROJECT_ROOT/libmetal/build/lib/;$PROJECT_ROOT/open-amp/build/lib/" \ +-DCMAKE_INSTALL_PREFIX=$PROJECT_ROOT/target + $ make -C build VERBOSE=1 install +``` + +## Run application on a Linux PC +It is possible to run application on a Linux PC to communicate between two Linux processes. + +```shell + $ cd $PROJECT_ROOT/target + $ echo "################### run ping test #####################" + $ LD_LIBRARY_PATH=./lib ./bin/rpmsg-echo-static & + $ sleep 1 + $ LD_LIBRARY_PATH=./lib ./bin//msg-test-rpmsg-ping-static 1 + + $ echo "################### run ping test #####################" + $ LD_LIBRARY_PATH=./lib ./bin/rpmsg-nocopy-echo-static & + $ sleep 1 + $ LD_LIBRARY_PATH=./lib ./bin//rpmsg-nocopy-ping-static 1 +``` diff --git a/third-party/openamp/openamp-system-reference/examples/legacy_apps/include/platform_info_common.h b/third-party/openamp/openamp-system-reference/examples/legacy_apps/include/platform_info_common.h new file mode 100644 index 000000000..c1f5c6613 --- /dev/null +++ b/third-party/openamp/openamp-system-reference/examples/legacy_apps/include/platform_info_common.h @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2024 Texas Instruments, Inc. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#ifndef PLATFORM_INFO_COMMON_H +#define PLATFORM_INFO_COMMON_H + +#include +#include +#include + +#if defined __cplusplus +extern "C" { +#endif + +/** + * platform_init - initialize the platform + * + * Initialize the platform. + * + * @argc: number of arguments + * @argv: array of the input arguments + * @platform: pointer to store the platform data pointer + * + * return 0 for success or negative value for failure + */ +int platform_init(int argc, char *argv[], void **platform); + +/** + * platform_create_rpmsg_vdev - create rpmsg vdev + * + * Create rpmsg virtio device, and return the rpmsg virtio + * device pointer. + * + * @platform: pointer to the private data + * @vdev_index: index of the virtio device, there can more than one vdev + * on the platform. + * @role: virtio driver or virtio device of the vdev + * @rst_cb: virtio device reset callback + * @ns_bind_cb: rpmsg name service bind callback + * + * return pointer to the rpmsg virtio device + */ +struct rpmsg_device * +platform_create_rpmsg_vdev(void *platform, unsigned int vdev_index, + unsigned int role, + void (*rst_cb)(struct virtio_device *vdev), + rpmsg_ns_bind_cb ns_bind_cb); + +/** + * platform_poll - platform poll function + * + * @platform: pointer to the platform + * + * return negative value for errors, otherwise 0. + */ +int platform_poll(void *platform); + +/** + * platform_release_rpmsg_vdev - release rpmsg virtio device + * + * @rpdev: pointer to the rpmsg device + */ +void platform_release_rpmsg_vdev(struct rpmsg_device *rpdev, void *platform); + +/** + * platform_cleanup - clean up the platform resource + * + * @platform: pointer to the platform + */ +void platform_cleanup(void *platform); + +#if defined __cplusplus +} +#endif + +#endif /* PLATFORM_INFO_COMMON_H */ diff --git a/third-party/openamp/openamp-system-reference/examples/legacy_apps/machine/phytium/phytium_rproc.c b/third-party/openamp/openamp-system-reference/examples/legacy_apps/machine/phytium/phytium_rproc.c new file mode 100644 index 000000000..8fb402296 --- /dev/null +++ b/third-party/openamp/openamp-system-reference/examples/legacy_apps/machine/phytium/phytium_rproc.c @@ -0,0 +1,313 @@ +/* + * Copyright (C) 2022, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: phytium_rproc.c + * Date: 2022-03-08 22:26:17 + * LastEditTime: 2022-03-09 13:16:04 + * Description:  This file define phytium platform specific remoteproc + * implementation. + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------     --------    -------------------------------------- + * 1.0 huanghe 2022/03/06 first release + */ + +/***************************** Include Files *********************************/ + +#include +#include +#include +#include +#include +#include +#include "platform_info.h" +#include "sdkconfig.h" +#include "fdebug.h" +#include "finterrupt.h" +#include "stdio.h" +#include "fmmu.h" +#include "ftypes.h" +#include "fcpu_info.h" +#include "fpsci.h" +#include "fcache.h" + +/************************** Constant Definitions *****************************/ + +/**************************** Type Definitions *******************************/ + +/************************** Variable Definitions *****************************/ + +/***************** Macros (Inline Functions) Definitions *********************/ + +#define PHYTIUM_RPROC_MAIN_DEBUG_TAG " PHYTIUM_RPROC_MAIN" +#define PHYTIUM_RPROC_MAIN_DEBUG_I(format, ...) FT_DEBUG_PRINT_I( PHYTIUM_RPROC_MAIN_DEBUG_TAG, format, ##__VA_ARGS__) +#define PHYTIUM_RPROC_MAIN_DEBUG_W(format, ...) FT_DEBUG_PRINT_W( PHYTIUM_RPROC_MAIN_DEBUG_TAG, format, ##__VA_ARGS__) +#define PHYTIUM_RPROC_MAIN_DEBUG_E(format, ...) FT_DEBUG_PRINT_E( PHYTIUM_RPROC_MAIN_DEBUG_TAG, format, ##__VA_ARGS__) + +/************************** Function Prototypes ******************************/ + +#ifdef CONFIG_USE_OPENAMP_IPI + +static void PhytiumIrqhandler(s32 vector, void *param) +{ + struct remoteproc *rproc = param; + struct remoteproc_priv *prproc; + prproc = rproc->priv; + (void)vector; + + if(!rproc) + { + PHYTIUM_RPROC_MAIN_DEBUG_E("rproc is empty.") ; + return ; + } + + if (prproc->src_table_ready_flag != 1) + { + goto exit; + } + + if (rproc_check_rsc_table_stop(rproc)) + { + PHYTIUM_RPROC_MAIN_DEBUG_E("stop flag found, cpu down!.\n\r") ; + rproc_set_stop_flag(); + FPsciCpuOff(); + return; + } + +exit: + atomic_flag_clear(&prproc->ipi_nokick); +} + +#endif + +static struct remoteproc * +PhytiumProcInit(struct remoteproc *rproc,const struct remoteproc_ops *ops, + void *arg) +{ + struct remoteproc_priv *prproc = arg; + struct metal_device *kick_dev; + unsigned int irq_vect; + int ret; + + if (!rproc || !prproc || !ops) + return NULL; + + ret = metal_device_open(prproc->kick_dev_bus_name, + prproc->kick_dev_name, + &kick_dev); + if (ret) { + PHYTIUM_RPROC_MAIN_DEBUG_E("Failed to open polling device: %d.", ret); + return NULL; + } + rproc->priv = prproc; + prproc->kick_dev = kick_dev; + + +#ifdef CONFIG_USE_OPENAMP_IPI + u32 cpu_id; + atomic_store(&prproc->ipi_nokick, 1); + GetCpuId(&cpu_id); + /* Register interrupt handler and enable interrupt */ + irq_vect = (uintptr_t)kick_dev->irq_info; + PHYTIUM_RPROC_MAIN_DEBUG_I("current %d",cpu_id) ; + InterruptSetPriority(irq_vect, IRQ_PRIORITY_VALUE_1) ; + InterruptInstall(irq_vect,PhytiumIrqhandler,rproc,"phytium_rproc") ; + PHYTIUM_RPROC_MAIN_DEBUG_I("irq_vect is %d",irq_vect) ; + InterruptUmask(irq_vect) ; +#else + prproc->kick_io = metal_device_io_region(kick_dev, 0); + if (!prproc->kick_io) + goto err1; + (void)irq_vect; + metal_io_write32(prproc->kick_io, 0, !POLL_STOP); +#endif /* !CONFIG_USE_OPENAMP_IPI */ + + rproc->ops = ops; + + return rproc; +err1: + metal_device_close(kick_dev); + return NULL; +} + + +static void PhytiumProcRemove(struct remoteproc *rproc) +{ + struct remoteproc_priv *prproc; + struct metal_device *dev; + + if (!rproc) + { + return; + } + + prproc = rproc->priv; +#ifdef CONFIG_USE_OPENAMP_IPI + dev = prproc->kick_dev; + if (dev) { + PHYTIUM_RPROC_MAIN_DEBUG_E("Start to remove.") ; + InterruptMask((uintptr_t)dev->irq_info); + } +#else /* RPMSG_NO_IPI */ + (void)dev; +#endif /* !RPMSG_NO_IPI */ + metal_device_close(prproc->kick_dev); +} + +static void * +PhytiumProcMmap(struct remoteproc *rproc, metal_phys_addr_t *pa, + metal_phys_addr_t *da, size_t size, + unsigned int attribute, struct metal_io_region **io) +{ + struct remoteproc_mem *mem; + metal_phys_addr_t lpa, lda; + struct metal_io_region *tmpio; + + lpa = *pa; + lda = *da; + + if (lpa == METAL_BAD_PHYS && lda == METAL_BAD_PHYS) + return NULL; + if (lpa == METAL_BAD_PHYS) + lpa = lda; + if (lda == METAL_BAD_PHYS) + lda = lpa; + + if (!attribute) + attribute = (MT_NORMAL|MT_P_RW_U_NA);/* default attribute */ + + mem = metal_allocate_memory(sizeof(*mem)); + if (!mem) + return NULL; + tmpio = metal_allocate_memory(sizeof(*tmpio)); + if (!tmpio) { + metal_free_memory(mem); + return NULL; + } + /* + mem->pa = lpa; + mem->da = lda; + mem->io = tmpio; + mem->size = size; + */ + remoteproc_init_mem(mem, NULL, lpa, lda, size, tmpio); + /* + va is the same as pa in this platform, + tmpio->virt = lpa; + tmpio->physmap = &mem->pa; + tmpio->size = size; + tmpio->page_shift = -1; + tmpio->mem_flags = attribute; + tmpio->ops = ops ? *ops : nops; const struct metal_io_ops nops = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; + */ + metal_io_init(tmpio, (void *)lpa, &mem->pa, size, -1, attribute, NULL); + /* + Add remoteproc memory + &rproc->mems, add &mem->node + */ + remoteproc_add_mem(rproc, mem); + *pa = lpa; + *da = lda; + if (io) + *io = tmpio; + return metal_io_phys_to_virt(tmpio, mem->pa); + +} + +static int PhytiumProcNotify(struct remoteproc *rproc, uint32_t id) +{ + struct remoteproc_priv *prproc; + + (void)id; + if (!rproc) + return -1; + prproc = rproc->priv; + +#ifndef CONFIG_USE_OPENAMP_IPI + metal_io_write32(prproc->kick_io, 0, POLL_STOP); +#else +#ifdef CONFIG_USE_MASTER_VRING_DEFINE + InterruptCoreInterSend((uintptr)(prproc->kick_dev->irq_info), prproc->cpu_id); +#else + InterruptCoreInterSend((uintptr)(prproc->kick_dev->irq_info), 1 << prproc->cpu_id); +#endif +#endif /* RPMSG_NO_IPI */ + return 0; +} + +static int Phytium_rproc_start(struct remoteproc *rproc) +{ + struct remoteproc_priv *priv; + FError ret; + + priv = rproc->priv; + FCacheDCacheFlush(); + ret = FPsciCpuMaskOn(1 << priv->cpu_id , (uintptr_t)rproc->bootaddr); + if (ret != 0) { + PHYTIUM_RPROC_MAIN_DEBUG_E("Failed to start core id 0x%x, ret=0x%x\n\r", priv->cpu_id, ret); + return -1; + } + + return 0; +} + +static int PhytiumProcStop(struct remoteproc *rproc) +{ + /* It is lacking a stop operation in the libPM */ + (void)rproc; + return 0; +} + +static int PhytiumProcShutdown(struct remoteproc *rproc) +{ + struct remoteproc_priv *priv; + int ret; + struct remoteproc_mem *mem; + struct metal_list *node; + + priv = rproc->priv; + /* Delete all the registered remoteproc memories */ + metal_list_for_each(&rproc->mems, node) { + struct metal_list *tmpnode; + metal_phys_addr_t pa, pa_end; + + mem = metal_container_of(node, struct remoteproc_mem, node); + tmpnode = node; + node = tmpnode->prev; + metal_list_del(tmpnode); + metal_free_memory(mem->io); + metal_free_memory(mem); + } +/* + if (rproc->state == RPROC_RUNNING) + { + return -1; + } +*/ + return 0; +} + +const struct remoteproc_ops phytium_proc_ops = { + .init = PhytiumProcInit, + .remove = PhytiumProcRemove, + .mmap = PhytiumProcMmap, + .notify = PhytiumProcNotify, + .start = Phytium_rproc_start, + .stop = PhytiumProcStop, + .shutdown = PhytiumProcShutdown, +}; + diff --git a/third-party/openamp/openamp-system-reference/examples/legacy_apps/machine/phytium/platform_info.c b/third-party/openamp/openamp-system-reference/examples/legacy_apps/machine/phytium/platform_info.c new file mode 100644 index 000000000..72b6a454f --- /dev/null +++ b/third-party/openamp/openamp-system-reference/examples/legacy_apps/machine/phytium/platform_info.c @@ -0,0 +1,282 @@ +/* + * Copyright (C) 2024, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: platform_info.c + * Created Date: 2024-04-28 17:13:10 + * Last Modified: 2025-02-28 09:57:15 + * Description: This file is for + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + */ + + +#include "platform_info.h" +#include "ftypes.h" +#include +#include +#include +#include +#include "platform_info.h" +#include "remoteproc.h" +#include "rsc_table.h" +#include "sdkconfig.h" +#include "fdebug.h" +#include "helper.h" + +#define FT_PLAT_INFO_MAIN_DEBUG_TAG " FT_PLAT_INFO_MAIN" +#define FT_PLAT_INFO_MAIN_DEBUG_I(format, ...) FT_DEBUG_PRINT_I( FT_PLAT_INFO_MAIN_DEBUG_TAG, format, ##__VA_ARGS__) +#define FT_PLAT_INFO_MAIN_DEBUG_W(format, ...) FT_DEBUG_PRINT_W( FT_PLAT_INFO_MAIN_DEBUG_TAG, format, ##__VA_ARGS__) +#define FT_PLAT_INFO_MAIN_DEBUG_E(format, ...) FT_DEBUG_PRINT_E( FT_PLAT_INFO_MAIN_DEBUG_TAG, format, ##__VA_ARGS__) + +#ifdef CONFIG_USE_OPENAMP_IPI +#define _rproc_wait() asm volatile("wfi") +#endif /* !RPMSG_NO_IPI */ + +/************************** Variable Definitions *****************************/ +static volatile unsigned int stop_flag = 0; +extern struct remoteproc_ops phytium_proc_ops ; + +#ifdef CONFIG_USE_MASTER_VRING_DEFINE +static metal_phys_addr_t linux_share_buffer; +#endif +/************************** Function Prototypes ******************************/ +#ifdef CONFIG_USE_OPENAMP_IPI +unsigned int rproc_check_rsc_table_stop(struct remoteproc *rproc) +{ + if (!rproc) { + FT_PLAT_INFO_MAIN_DEBUG_E("rproc NULL! \r\n"); + return 0; + } + struct remote_resource_table *table_ptr = rproc->rsc_table; + unsigned int *flag = table_ptr->reserved; + + if (*flag & REMOTE_PROC_STOP) { + return 1; + } else { + return 0; + } +} +#endif + +unsigned int rproc_get_stop_flag(void) +{ + return stop_flag; +} + +void rproc_set_stop_flag(void) +{ + stop_flag |= REMOTE_PROC_STOP; +} + +void rproc_clear_stop_flag(void) +{ + stop_flag &= ~REMOTE_PROC_STOP; +} + + +struct remoteproc *platform_create_proc(struct remoteproc * rproc_inst,struct remoteproc_priv *priv ,struct metal_device *kick_dev) +{ + struct remoteproc * rproc; + + if (metal_register_generic_device(kick_dev)) + { + return NULL; + } + + /* Initialize remoteproc instance */ + /* metal_device_open(KICK_BUS_NAME,KICK_DEV_NAME,rproc_inst->priv->kick_dev) */ + /* rproc_inst->priv->kick_io = metal_device_io_region(rproc_inst->priv->kick_dev, 0); */ + rproc = remoteproc_init(rproc_inst, &phytium_proc_ops, priv) ; + + return rproc; +} + + +int platform_setup_src_table(struct remoteproc *rproc_inst,metal_phys_addr_t *rsc_table) +{ + metal_phys_addr_t pa; + struct remoteproc_priv *priv = rproc_inst->priv; + int ret; + // metal_phys_addr_t *rsc_table = priv->src_table_va ; + size_t rsc_size = sizeof(struct remote_resource_table) ; + unsigned int attribute = priv->src_table_attribute ; + + pa = (metal_phys_addr_t)rsc_table; + /* rproc_inst.mems rproc_inst.rsc_io*/ + /* 在OpenAMP应用中,通常需要通过remoteproc_mmap()函数将远程处理器中的共享内存映射到本地主机中,以便应用程序进行读写操作。*/ + (void *)remoteproc_mmap(rproc_inst, &pa, NULL, rsc_size, attribute, &rproc_inst->rsc_io); + + ret = remoteproc_set_rsc_table(rproc_inst, (struct resource_table *)rsc_table, rsc_size); + if (ret) + { + FT_PLAT_INFO_MAIN_DEBUG_E("Failed to intialize remoteproc %d \r\n",ret); + remoteproc_remove(rproc_inst); + return -1; + } + priv->src_table_ready_flag = 1;/* 标记src_table已经准备好了 */ + return 0 ; +} + + +int platform_setup_share_mems(struct remoteproc *rproc_inst) +{ + int ret; + struct remoteproc_priv *priv = rproc_inst->priv; +#ifdef CONFIG_USE_MASTER_VRING_DEFINE /*获取资源表中的共享内存地址*/ + struct remote_resource_table *table_ptr = rproc_inst->rsc_table; + FT_PLAT_INFO_MAIN_DEBUG_I("da is %p ~ %p \r\n",table_ptr->rpmsg_vdev.vring[0].da,table_ptr->rpmsg_vdev.vring[0].da + priv->share_mem_size); + priv->share_mem_pa = table_ptr->rpmsg_vdev.vring[0].da;/* 默认kernel vring[0].da 的首地址是整个sharememory的起始位置*/ + priv->share_mem_va = priv->share_mem_pa; +#endif + (void *)remoteproc_mmap(rproc_inst, &priv->share_mem_pa, &priv->share_mem_va, priv->share_mem_size, priv->share_mem_attribute, NULL); + return 0 ; +} + + +struct rpmsg_device *platform_create_rpmsg_vdev(void *platform, unsigned int vdev_index, unsigned int role, + void (*rst_cb)(struct virtio_device *vdev), rpmsg_ns_bind_cb ns_bind_cb) +{ + struct remoteproc *rproc = platform; + struct rpmsg_virtio_device *rpmsg_vdev; + struct virtio_device *vdev; + void *shbuf; + struct metal_io_region *shbuf_io; + struct remoteproc_priv *priv = rproc->priv; + int ret; + + rpmsg_vdev = metal_allocate_memory(sizeof(*rpmsg_vdev)); + if (!rpmsg_vdev) + return NULL; + + shbuf_io = remoteproc_get_io_with_pa(rproc, priv->share_mem_pa); + if (!shbuf_io) + goto err1; + FT_PLAT_INFO_MAIN_DEBUG_I("share_mem_pa is %p \r\n",priv->share_mem_pa); + shbuf = metal_io_phys_to_virt(shbuf_io, priv->share_mem_pa + priv->share_buffer_offset); + /* TODO: can we have a wrapper for the following two functions? */ + vdev = remoteproc_create_virtio(rproc, vdev_index, role, rst_cb); + if (!vdev) { + FT_PLAT_INFO_MAIN_DEBUG_E("failed remoteproc_create_virtio\r\n"); + goto err1; + } + + /* Only RPMsg virtio master needs to initialize the shared buffers pool */ + rpmsg_virtio_init_shm_pool(&priv->shpool, shbuf, priv->share_mem_size - priv->share_buffer_offset); + + /* RPMsg virtio slave can set shared buffers pool argument to NULL */ + ret = rpmsg_init_vdev(rpmsg_vdev, vdev, ns_bind_cb, shbuf_io, &priv->shpool); + if (ret) { + FT_PLAT_INFO_MAIN_DEBUG_E("failed rpmsg_init_vdev ret is %d \r\n",ret); + goto err2; + } + FT_PLAT_INFO_MAIN_DEBUG_I("initializing rpmsg vdev\r\n"); + return rpmsg_virtio_get_rpmsg_device(rpmsg_vdev); + +err2: + remoteproc_remove_virtio(rproc, vdev); +err1: + metal_free_memory(rpmsg_vdev); + return NULL; +} + +int platform_poll(void *priv) +{ + struct remoteproc *rproc = priv; + struct remoteproc_priv *prproc; + unsigned int flags; + int ret; + + + prproc = rproc->priv; + while(1) { +#ifndef CONFIG_USE_OPENAMP_IPI + if (metal_io_read32(prproc->kick_io, 0) & POLL_STOP) { //RPROC_M2S_SHIFT + ret = remoteproc_get_notification(rproc, RSC_NOTIFY_ID_ANY); + if (ret) + return ret; + break; + } + (void)flags; +#else /* !RPMSG_NO_IPI */ + flags = metal_irq_save_disable(); + if (!(atomic_flag_test_and_set(&prproc->ipi_nokick))) + { + metal_irq_restore_enable(flags); + ret = remoteproc_get_notification(rproc, RSC_NOTIFY_ID_ANY); + if (ret) + return ret; + break; + } + _rproc_wait() ; + metal_irq_restore_enable(flags); +#endif /* RPMSG_NO_IPI */ + } + return 0; +} + +int platform_poll_nonblocking(void *priv) +{ + struct remoteproc *rproc = priv; + struct remoteproc_priv *prproc; + unsigned int flags; + int ret; + + + prproc = rproc->priv; + +#ifndef CONFIG_USE_OPENAMP_IPI + if (metal_io_read32(prproc->kick_io, 0) & POLL_STOP) { //RPROC_M2S_SHIFT + ret = remoteproc_get_notification(rproc, RSC_NOTIFY_ID_ANY); + if (ret) + return ret; + } + (void)flags; +#else /* !RPMSG_NO_IPI */ + flags = metal_irq_save_disable(); + if (!(atomic_flag_test_and_set(&prproc->ipi_nokick))) + { + metal_irq_restore_enable(flags); + ret = remoteproc_get_notification(rproc, RSC_NOTIFY_ID_ANY); + if (ret) + return ret; + } + metal_irq_restore_enable(flags); +#endif /* RPMSG_NO_IPI */ + return 0; +} + +void platform_release_rpmsg_vdev(struct rpmsg_device *rpdev, void *platform) +{ + struct rpmsg_virtio_device *rpvdev; + struct remoteproc *rproc; + + rpvdev = metal_container_of(rpdev, struct rpmsg_virtio_device, rdev); + rproc = platform; + + rpmsg_deinit_vdev(rpvdev); + remoteproc_remove_virtio(rproc, rpvdev->vdev); +} + +void platform_cleanup(void *platform) +{ + struct remoteproc *rproc = platform; + + if (rproc) + remoteproc_remove(rproc); + cleanup_system(); +} \ No newline at end of file diff --git a/third-party/openamp/openamp-system-reference/examples/legacy_apps/machine/phytium/platform_info.h b/third-party/openamp/openamp-system-reference/examples/legacy_apps/machine/phytium/platform_info.h new file mode 100644 index 000000000..d605fa061 --- /dev/null +++ b/third-party/openamp/openamp-system-reference/examples/legacy_apps/machine/phytium/platform_info.h @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2024, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: platform_info.h + * Created Date: 2024-04-28 17:13:17 + * Last Modified: 2024-06-26 14:47:43 + * Description: This file is for + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + */ +#ifndef PLATFORM_INFO_H_ +#define PLATFORM_INFO_H_ + +/***************************** Include Files *********************************/ +#include +#include +#include +#include +#include "sdkconfig.h" +#include "ftypes.h" +#include "platform_info_common.h" + +/************************** Constant Definitions *****************************/ + +/************************** Variable Definitions *****************************/ + +#if defined __cplusplus +extern "C" { +#endif + +/***************** Macros (Inline Functions) Definitions *********************/ +/* 需要宇linux 进行沟通 */ +#define POLL_STOP 0x1U +#define REMOTE_PROC_STOP 0x0001U +/**************************** Type Definitions *******************************/ + +struct remoteproc_priv { + const char *kick_dev_name; + const char *kick_dev_bus_name; + struct metal_device *kick_dev; + struct metal_io_region *kick_io; +#ifdef CONFIG_USE_OPENAMP_IPI + atomic_int ipi_nokick; +#endif /* !RPMSG_NO_IPI */ + unsigned int cpu_id ; + /* remoteproc elf address */ + metal_phys_addr_t elf_addr; + unsigned int src_table_ready_flag ; + /* src_table memory */ + u32 src_table_attribute ; + /* share_mem_size = |tx vring|rx vring|share buffer| */ + metal_phys_addr_t share_mem_va ; + metal_phys_addr_t share_mem_pa ; + u32 share_mem_size ; + u32 share_buffer_offset ; + u32 share_mem_attribute ; + struct rpmsg_virtio_shm_pool shpool; +}; + +/************************** Function Prototypes ******************************/ + +struct remoteproc *platform_create_proc(struct remoteproc * rproc_inst,struct remoteproc_priv *priv ,struct metal_device *kick_dev) ; + +int platform_setup_src_table(struct remoteproc *rproc_inst,metal_phys_addr_t *rsc_table) ; + +int platform_setup_share_mems(struct remoteproc *rproc_inst); + +int platform_poll_nonblocking(void *priv) ; + +#ifdef CONFIG_USE_OPENAMP_IPI +unsigned int rproc_check_rsc_table_stop(struct remoteproc *rproc); +#endif + +unsigned int rproc_get_stop_flag(void); + +void rproc_set_stop_flag(void); + +void rproc_clear_stop_flag(void); + +#if defined __cplusplus +} +#endif + + +#endif diff --git a/third-party/openamp/openamp-system-reference/examples/legacy_apps/machine/phytium/rsc_table.h b/third-party/openamp/openamp-system-reference/examples/legacy_apps/machine/phytium/rsc_table.h new file mode 100644 index 000000000..5b10c599a --- /dev/null +++ b/third-party/openamp/openamp-system-reference/examples/legacy_apps/machine/phytium/rsc_table.h @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2022, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: rsc_table.h + * Date: 2022-02-23 11:24:12 + * LastEditTime: 2022-02-23 11:44:06 + * Description:  This file populates resource table for BM remote + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------     --------    -------------------------------------- + * 1.0 huanghe 2022/03/06 first release + */ + + +#ifndef RSC_TABLE_H +#define RSC_TABLE_H + +/***************************** Include Files *********************************/ + +#include +#include + +#if defined __cplusplus +extern "C" { +#endif + +#define NO_RESOURCE_ENTRIES 8 + +#define __section_t(S) __attribute__((__section__(#S))) +#define __resource __section_t(.resource_table) + +#define RPMSG_IPU_C0_FEATURES 1 + +/* VirtIO rpmsg device id */ +#define VIRTIO_ID_RPMSG_ 7 + +/* notifyid is a unique rproc-wide notify index for this vdev */ +#define VDEV_NOTIFYID 0 +/* Remote supports Name Service announcement */ +#define VIRTIO_RPMSG_F_NS 0 + +#define NUM_VRINGS 0x02 +#define VRING_ALIGN 0x1000 +#define RING_TX CONFIG_VRING_TX_ADDR +#define RING_RX CONFIG_VRING_RX_ADDR + + +#define NUM_TABLE_ENTRIES 1 + + +/**************************** Type Definitions *******************************/ + +/* Resource table for the given remote */ +struct remote_resource_table { + unsigned int version; + unsigned int num; + unsigned int reserved[2]; + unsigned int offset[NO_RESOURCE_ENTRIES]; + /* rpmsg vdev entry */ + struct fw_rsc_vdev rpmsg_vdev; + struct fw_rsc_vdev_vring rpmsg_vring0; + struct fw_rsc_vdev_vring rpmsg_vring1; +}__attribute__((packed, aligned(0x1000))); + +#if defined __cplusplus +} +#endif + +#endif /* RSC_TABLE_H */ diff --git a/third-party/openamp/openamp-system-reference/examples/legacy_apps/system/CMakeLists.txt b/third-party/openamp/openamp-system-reference/examples/legacy_apps/system/CMakeLists.txt new file mode 100644 index 000000000..7ded68baa --- /dev/null +++ b/third-party/openamp/openamp-system-reference/examples/legacy_apps/system/CMakeLists.txt @@ -0,0 +1,3 @@ +if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_SYSTEM}/CMakeLists.txt") + add_subdirectory (${PROJECT_SYSTEM}) +endif (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_SYSTEM}/CMakeLists.txt") diff --git a/third-party/openamp/openamp-system-reference/examples/legacy_apps/system/generic/CMakeLists.txt b/third-party/openamp/openamp-system-reference/examples/legacy_apps/system/generic/CMakeLists.txt new file mode 100644 index 000000000..ea643a46d --- /dev/null +++ b/third-party/openamp/openamp-system-reference/examples/legacy_apps/system/generic/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory (machine) diff --git a/third-party/openamp/openamp-system-reference/examples/legacy_apps/system/generic/machine/phytium/helper.c b/third-party/openamp/openamp-system-reference/examples/legacy_apps/system/generic/machine/phytium/helper.c new file mode 100644 index 000000000..1acf22f02 --- /dev/null +++ b/third-party/openamp/openamp-system-reference/examples/legacy_apps/system/generic/machine/phytium/helper.c @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2022, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: helper.c + * Date: 2022-01-03 13:04:02 + * LastEditTime: 2022-01-06 21:51:08 + * Description: This file is for helper + * + * Modify History: + * Ver Who Date Changes + * ----- ------ -------- -------------------------------------- + * 1.0 huanghe 2022/03/06 first release + */ + +#include +#include "platform_info.h" +#include "stdio.h" +#include "fcache.h" + +static void system_metal_logger(enum metal_log_level level, + const char *format, ...) +{ + char msg[1024]; + va_list args; + static const char * const level_strs[] = { + "metal: emergency: ", + "metal: alert: ", + "metal: critical: ", + "metal: error: ", + "metal: warning: ", + "metal: notice: ", + "metal: info: ", + "metal: debug: ", + }; + + va_start(args, format); + vsnprintf(msg, sizeof(msg), format, args); + va_end(args); + + if (level <= METAL_LOG_EMERGENCY || level > METAL_LOG_DEBUG) + level = METAL_LOG_EMERGENCY; + + printf("%s%s", level_strs[level], msg); +} + +/* Main hw machinery initialization entry point, called from main()*/ +/* return 0 on success */ +int init_system(void) +{ + int ret; + struct metal_init_params metal_param = { + .log_handler = system_metal_logger, + .log_level = METAL_LOG_INFO, + }; + + /* Low level abstraction layer for openamp initialization */ + ret = metal_init(&metal_param); + return ret; +} + +void cleanup_system(void) +{ + metal_finish(); + FCacheDCacheInvalidate() ; + FCacheICacheInvalidate() ; +} diff --git a/third-party/openamp/openamp-system-reference/examples/legacy_apps/system/generic/machine/phytium/helper.h b/third-party/openamp/openamp-system-reference/examples/legacy_apps/system/generic/machine/phytium/helper.h new file mode 100644 index 000000000..80a1ba8b9 --- /dev/null +++ b/third-party/openamp/openamp-system-reference/examples/legacy_apps/system/generic/machine/phytium/helper.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2024, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: helper.h + * Created Date: 2024-05-14 10:51:06 + * Last Modified: 2024-07-03 11:21:58 + * Description: This file is for helper functions. + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + * 1.0 liusm 2024-05-14 10:51:06 First version. + */ + +#ifndef HELPER_H_ +#define HELPER_H_ + +#include "ftypes.h" + +#if defined __cplusplus +extern "C" { +#endif + +int init_system(void); +void cleanup_system(void); + +#if defined __cplusplus +} +#endif + +#endif /* */ diff --git a/third-party/openamp/ports/version_def.h b/third-party/openamp/ports/version_def.h new file mode 100644 index 000000000..46903b1e9 --- /dev/null +++ b/third-party/openamp/ports/version_def.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2025, Phytium Technology Co., Ltd. All Rights Reserved. + * + * Licensed under the BSD 3-Clause License (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of + * the License at + * + * https://opensource.org/licenses/BSD-3-Clause + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * FilePath: version_def.h + * Created Date: 2025-06-26 14:13:17 + * Last Modified: 2025-06-26 14:47:43 + * Description: This file is for + * + * Modify History: + * Ver Who Date Changes + * ----- ---------- -------- --------------------------------- + * 1.0 LiuSM 2025-06-26 14:13:17 first version + */ + +#ifndef __OPENAMP_VERSION_DEF__H__ +#define __OPENAMP_VERSION_DEF__H__ + +/* @templates@ values come from cmake/option.cmake */ + +#define OPENAMP_VERSION_MAJOR 1 +#define OPENAMP_VERSION_MINOR 8 +#define OPENAMP_VERSION_PATCH 0 +#define OPENAMP_VERSION "v2025.04" + +#endif /* __OPENAMP_VERSION_DEF__H__ */ -- Gitee

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